重学Python数据分析(pandas、numpy和matplotlib)更新ing

1 pandas库

我们一般起别名为pd:

import pandas as pd

pandas 不仅可以从多种不同的文件格式读取数据,还有各种各样的数据处理的功能。

1.1 使用 pandas 读取 csv 文件

pandas 模块提供了一个 read_ csv 的方法,可以直接读取 csv 文件,并返回一个 DataFrame 对象。DataFrame 对象是 pandas 模块的核心,pandas 的所有表格都是通过 DataFrame 对象来存储的,并且 DataFrame 还提供了非常多查看数据、修改数据的方法。

Created with Raphaël 2.3.0 创建变量 pd.read_ csv("xxx.csv") 返回为DataFrame 对象

注:为了让DataFrame对象打印起来更好看(在jupyter notebook里面),那就把 DataFrame 变量放在 Cell 的末尾,就会更加好看。

1.2 使用 pandas 读取 excel 文件

pandas 也提供了read_excel函数来实现读取 excel 文件中的内容,但是使用方法比 read_ csv稍微复杂一些。

但是excel可以有多个sheet,所以需要多个参数读取不同的表格:

# 使用 read_excel 函数读取 data.xlsx 文件里的 “sheet2” 这个表格
# 并将结果存在 df_perf 变量中
df_perf = pd.read_excel("data.xlsx", sheet_name="sheet2")
# 让notebook 打印 df_perf 变量
df_perf

如果不指定,pandas 则默认加载第一个表格。

>>选择性读取
有时候, excel 文件的数据很多,全部加载到 Python 中可能会卡,而且有时候我们只对其中某几列感兴趣,全部加载显示也不容易看。read_excel 提供了usecols参数,可以指定要加载哪几列。

df_perf1 = pd.read_excel("info.xlsx", sheet_name="sheet2", usecols="A,B")
# 这里指的是加载Excel A、B两列

1.3 使用 pandas 读取 html 文件

通过 read_html 函数将 html 内容中的表格提取为一个DataFrame 的列表,通过逐一查看来确定哪个是我们想要的。

# 人民银行的2020金融市场报表数据
url= "http://www.pbc.gov.cn/eportal/fileDir/defaultCurSite/resource/cms/2021/01/2021011818262828764.htm"

from selenium import webdriver
brow = webdriver.Chrome()
brow.get(url)
eco_content = brow.page_source

# print(eco_content)
df_list = pd.read_html(eco_content)
print(len(df_list))

# 人民银行的2020金融市场报表数据在此
df_list[0]

人民银行的2020金融市场报表数据

1.4 DataFrame对象

1.4.1 关键概念

  • index:索引
  • Series:一种数据类型,Series 一般由两部分组成:index 和 values。其中values类似于列表,index 代表了索引(为了能方便地定位到 values 里面的数据)。此外,Series 有一个单独的索引项,这就使得它既支持类似列表一样的数字索引,也支持类似字典一样的用字符串或者其他 Python 对象来做索引。
    可以理解为列表和字典的集合体[{...},{...},...])
  • DataFrame:二维数据表,其实就是由 Series 组成的,DataFrame 的某一行,或者某一列都是一个 Series。

1.4.2 一维数据序列Series

创建一个序列
在这里插入图片描述
我们单独访问两个属性:
在这里插入图片描述
从代码输出结果可以看到,values 其实就是我们传入的列表值,而 index 则是一个 RangeIndex 的对象。然后我们就可以通过ser1[1]的方式来索引到values的值。


接下来尝试创建 Series,并指定索引:
在这里插入图片描述
这里就可以看到同时创建了对应的索引,然后我们打印索引和值:
在这里插入图片描述
所以 Series 可以看成是高级的列表或者字典,当不指定 index 的时候,Series 会生成默认的位置索引,这样的 Series 就像是一个列表。而当我们指定了 index 之后,则可以通过 index 列表中的元素来访问对应的 values 中的元素,就像字典的 key-value 结构一样。

1.4.3 二维数据表:DataFrame

列 Series 的 index 是 DataFrame 的行头,
行 Series 的 index 则是 DataFrame 的列名。
在这里插入图片描述
在这里插入图片描述

(1)用Series 构造出 DataFrame

在这里插入图片描述

来构造这个表格:
在这里插入图片描述

index = ['库名', '熟练度', '使用难度']
ser_pd = pd.Series(['pandas', 65, '中'], index=index)
ser_np = pd.Series(['numpy', 75, '易'], index=index)
ser_plt = pd.Series(['matplotlib', 70, '易'], index=index)
df = pd.DataFrame([ser_pd, ser_np, ser_plt])
df

在这里插入图片描述

在这里插入图片描述
我们除了可以用Series,还可以用列表、字典、numpy的ndarray对象等来创建DataFrame对象,可以参考《菜鸟教程:Pandas 数据结构 - DataFrame》。

(2)添加行、列

利用append方法就可以添加行到DataFrame对象:

# 我们添加一行数据
ser_torch = pd.Series(['pytorch', 55, '难'], index=index)
# 设置 ignore_index 的含义是让 DataFrame 自动生成行索引
# 调用 append 之后,会返回一个新的 DataFrame,我们将其保存回原变量中
df = df.append(ser_torch, ignore_index= True)
# 查看添加后的DataFrame
df

在这里插入图片描述
添加列的方式更简单一些:

# 将新添加的 Series 赋值给 DataFrame 中新列名对应的列 Series
df["考核结果"] = pd.Series(["合格", "优秀", "合格", "不合格"])
# 打印
df

# 当然还可以统一添加一个值
df["考核结果"] = "合格"
# 打印
df

在这里插入图片描述
当我们对 DataFrame 某个列名对应的列 Series 赋值,当列名不存在的时候,则会新建对应的列,而当列名存在时,则会修改原先列的值。所以我们不仅可以创建新的列也可以修改已有的列。

(3)删除行、列

DataFrame 提供了 drop 方法来删除某一行或者某一列。
删除列:

# labels 是要删除的列名
# axis = 1 代表要删除的是列
# inplace = True 代表删除直接在 df中生效。
df.drop(labels = "考核结果", axis=1, inplace= True)
# 打印
df

在这里插入图片描述
删除行:

# labels 是要删除的行的index
# axis = 0 代表要删除的是行
# inplace = True 代表删除直接在 df中生效。
# 我们删除库名为matplotlib的信息
df.drop(labels = 2, axis=0, inplace=True)
# 打印
df

在这里插入图片描述

(4)单个单元格的查看与修改

在这里插入图片描述
对于单个单元格的查看和修改,推荐的方式是使用 DataFrame 的 loc 属性,可以一步到位指定定位到单元格,假设我们需要查看第三方库pytorch的熟练度:

# loc 属性后面跟中括号,中括号里面第一个元素是行索引,第二个元素是列索引
# pytorch的行索引是1,我们想查看熟练度,所以列索引就是熟练度
df.loc[3, "熟练度"]

在这里插入图片描述
然后我们直接赋值就可以修改熟练度:

df.loc[3, "熟练度"] = 65
(5)DataFrame 的排序

DataFrame 提供了 sort_values 方法来实现排序,例如我们想要根据熟练度对第三方库进行排序:

# by 参数代表要按 rating 这个列索引来排序
# inplace = True 的含义和上面一样,代表更新当前的DataFrame,而不是返回一个新的
df.sort_values(by = "熟练度", inplace=True)
# 查看排序后的 DataFrame
df

在这里插入图片描述
默认是升序排序,降序排序需要设置ascending 设置为False:

# by 参数代表要按 rating 这个列索引来排序
# inplace = True 的含义和上面一样,代表更新当前的DataFrame,而不是返回一个新的
df.sort_values(by = "熟练度", inplace=True, ascending=False)
# 查看排序后的 DataFrame
df

在这里插入图片描述
从这里可以发现,之前我们删掉了一行,导致行2缺失,但是不应影响序列,所以Series 的数字索引是可以不连续的,这个也是和列表的一个重要区别。

(6)取头取尾与计算行列数

简单操作,不需要演示,针对于较多数据十分管用。

# head 函数返回 DataFrame 的前 N 条记录,N就是函数参数指定的值
# 这里我们指定10行
df.head(10)

# tail 函数,返回DataFrame 的末尾的 N 条记录,N就是函数的参数
# 这里我们指定10行
df.tail(20)

# shape 属性,返回一个元组,第一个是行数,第二个元素是列数
shape = df.shape
# 打印行数和列数
print("行数:", shape[0])
print("列数:", shape[1])

1.5 切片与数据查询loc 和 iloc

1.5.1 切片

中括号[], 是 pandas 中最基础的索引器,和python中的切片类似。

DataFrame 和 Series 同样支持 []. 具体的行为是:
1.对 Series 使用[],返回索引对应的元素;
2.对 DataFrame 使用[],返回列名等于索引的那一列,以 Series 的形式。

# 获取库名Series
ser_name = df["库名"]
print(type(ser_name))
print(ser_name)

print("----------------------")
# 我们还可以选择多条数据数据,返回还是Series
ser_name_1 = ser_name[[0,2]]
print(type(ser_name_1))
print(ser_name_1)

在这里插入图片描述

# 获取新的DataFrame
df_new = df[["库名", "使用难度"]]
print(type(df_new))
print(df_new)

在这里插入图片描述
== 切片的运用==
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里和python的切片类似就不细说了,关于python基本数据类型详见撰写的《Python四种重要数据结构的深入学习》。

1.5.2 数据查询loc和iloc

用切片查找元素十分笨拙,所以pandas 除了 [] 索引器之外,还提供了一套非常强大的数据查询方式:loc 和 iloc。

pandas提供了专门的用于索引DataFrame的方法,即使用ix方法进行索引,不过ix在最新的版本中已经被废弃了,如果要是用标签,最好使用loc方法,如果使用下标,最好使用iloc方法。

(1)loc
# 基本形式
df.loc[行索引名称, 列索引名称]

loc 对象的 [] 索引器支持所有 DataFrame 的 [] 索引器的能力,即 loc 对象的行索引部分和列索引部分都可以分别使用多种索引、范围选择的语法。
在这里插入图片描述

(2)iloc

iloc 的用法和 loc 非常类似,区别是 iloc 仅支持传入整数索引。
loc 是需要传入行索引和列索引的名称,而 iloc 则需要传入第几行、第几列这样的数字。基本用法如下:

df.iloc[第几行, 第几列]

在这里插入图片描述

(3)条件查询
df.loc[条件表达式, 列索引名称]

使用示例:
在这里插入图片描述

1.6 数据清洗

1.6.1 缺失值处理

当我们从 CSV 文件或者其他数据源加载到 DataFrame 中时,往往会遇到某些单元格的数据是缺失的。当我们打印出 DataFrame 时,缺失的部分会显示为 NaN, 或者 None,或者 NaT(取决于单元格的数据类型),这样的值我们就称之为缺失值。

我们创建一个带有数据缺失的表格:


1.6.2 异常值处理

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值