一、简介&安装

Pandas是一个用于数据分析的开源Python库,主要用于处理电子表格等数据,提供了数据快速加载、操作、对齐、与合并等功能。Pandas通过引入两种数据实现了上述功能:DataFrame和Series,DataFrame表示整个电子表格或矩形数据,而Series是DataFrame的单列。
由于Pandas并不是Python标准库的一部分,所以需要额外安装(通过Anaconda安装Python环境时Anaconda也会安装一些常用包,包括Pandas,因此不需要额外安装)。
通过Windows自带的命令提示符安装Pandas:
1.在开始菜单搜索”命令提示符”或”CMD”打开窗口:
image.png
2.输入命令进行安装:

  1. # 安装最新版本的pandas
  2. pip install pandas
  3. # 安装指定版本的pandas
  4. pip install pandas==1.4.3
  5. # 安装完成后查看pandas信息
  6. pip show pandas
  7. # 卸载已安装的pandas
  8. pip uninstall pandas

二、基础知识介绍

2.1. 加载数据集

不是Python标准库的库在使用之前均需要导入,如下所示:

  1. # 直接导入
  2. import pandas

导入Pandas库之后,就可以通过调用read_csv函数来加载CSV数据文件了(案例使用文件下载:iris.csv):

  1. # 默认情况下,read_csv会读取逗号分隔文件
  2. df = pandas.read_csv('D:/TJ/python-learn/iris.csv')
  3. # 调用head()方法,显示前5行数据
  4. print(df.head())

导入Pandas库时,往往会给pandas起个别名,方便后续代码进行调用:

  1. import pandas as pd
  2. # 代码调用pandas时,使用别名pd即可
  3. df = pd.read_csv('D:/TJ/python-learn/iris.csv')

其中,read_csv是读取csv格式数据文件的函数,常用的参数说明如下:

  1. """
  2. read_csv(filepath, sep, header, names, index_col)
  3. filepath:文件路径地址
  4. sep:文件分隔符,默认为',',部分csv分隔符为制表符'\t'
  5. header:指定为标题行的行号,需要注意的是,大部分情况下Python中的变量都是从0开始编号
  6. names:输入标题行,如果文件本身自带标题行,需要指定header=0进行覆盖,否则会将文件自身的标题行当作内容处理
  7. index_col:指定为行索引的列序号或者列名称
  8. """
  1. 除上述参数外,read_csv函数还有更多其他参数,参数说明可以参考操作文档:[https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html?)<br />与read_csv类似的,Pandas还有读取Excel表格文件的函数read_excel,其常用参数说明如下:
  1. """
  2. read_excel(io, sheet_name, header, names, index_col)
  3. io:文件路径地址
  4. sheet_name:表格文件的Sheet名称
  5. header:指定为标题行的行号,需要注意的是,大部分情况下Python中的变量都是从0开始编号
  6. names:输入标题行,如果文件本身自带标题行,需要指定header=0进行覆盖,否则会将文件自身的标题行当作内容处理
  7. index_col:指定为行索引的列序号或者列名称
  8. """
  1. read_excel的其他参数可以参考文档:[https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html?)

2.2. 基础操作

首先,需要明确通过read_csv或read_excel读取的文件返回的结果都是DataFrame对象,DataFrame形式上与我们常见的表格类似,由行和列组成。

  1. import pandas as pd
  2. df = pd.read_csv('D:/TJ/python-learn/iris.csv')
  3. # 打印df的类型,其中type为Python内置的函数
  4. print(type(df))
  5. # <class 'pandas.core.frame.DataFrame'>
  6. # 获取行数和列数
  7. print(df.shape)
  8. # (150, 6)
  9. # 获取列名
  10. print(df.columns)
  11. # Index(['Number', 'Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width', 'Species'], dtype='object')
  12. # 获取每列的类型
  13. print(df.dtypes)
  14. # Number int64
  15. # Sepal.Length float64
  16. # Sepal.Width float64
  17. # Petal.Length float64
  18. # Petal.Width float64
  19. # Species object
  20. # dtype: object

DataFrame对象中,每列的类型必须相同,而每行可以包含混合类型;同时可以看到,上面的Pandas类型和Python类型并不一致,其对照关系如下:

Pandas类型 Python类型 说 明
object string 字符/字符串
int64 int 整数
float64 float 小数
datetime64 datetime 时间类型

1. 查看列、行和单元格

(1)获取列子集

  1. # 根据名称获取列子集
  2. df1 = df['Sepal.Length']
  3. # 通过名称的方式取多列时,需要嵌套一个方括号,这是因为df[]支持str或者list的形式传入参数
  4. df2 = df[['Sepal.Length', 'Sepal.Width']]
  5. # 上述代码等价于
  6. columns_use = ['Sepal.Length', 'Sepal.Width']
  7. df3 = df[columns_use]
  8. print(df1.head())
  9. print(df2.head())
  10. print(df3.head())

(2)获取行子集

  1. # 根据行号获取行子集
  2. df4 = df.iloc[0]
  3. # 通过传入多个行号,一次性获取多行
  4. df5 = df.iloc[[0, 1, 2]]
  5. # 上述代码等价于
  6. row_num = [0, 1, 2]
  7. df6 = df.iloc[row_num]
  8. print(df4.head())
  9. print(df5.head())
  10. print(df6.head())
  11. # 根据索引标签(行名)获取行子集
  12. df7 = df.loc[1]
  13. # 通过传入多个行名,一次性获取多行
  14. df8 = df.loc[[1, 2, 3]]
  15. # 上述代码等价于
  16. row_num = [1, 2, 3]
  17. df9 = df.iloc[row_num]
  18. print(df7.head())
  19. print(df8.head())
  20. print(df9.head())
  21. # 实际上,本例中的df行号和行名是一样的
  22. # 如果给df重新设置索引,再执行上面的代码,就会得到不一样的结果
  23. df_index = df.set_index(['Number']) # 将Number列设置为索引

(3)混合

loc和iloc属性除了可以用于获取行子集,还可以获取列子集或二者的子集。loc和iloc的一般语法是使用带逗号的方括号,逗号左边是待取子集的行值,逗号右边是待取子集的列值。

  1. # 通过行序号和列序号取子集
  2. # 获取第一行第一列
  3. cell = df.iloc[0, 0]
  4. # 获取前两行中的前两列数据
  5. cells = df.iloc[[0, 1], [0, 1]]
  6. print(cell)
  7. print(cells)
  8. # 通过行名称和列名称取子集
  9. # 获取列名称为Sepal.Length的第一行的子集
  10. cell_1 = df.loc[0, 'Sepal.Length']
  11. # 获取列名称分别为Sepal.Length和Sepal.Width的前两行的子集
  12. cells_1 = df.loc[[0, 1], ['Sepal.Length', 'Sepal.Width']]
  13. # 在上面的代码中,逗号左边应该传入的是行名称(索引标签)
  14. # 但是我们在读取数据的时候没有指定索引列,因此pandas会默认使用从0开始的整数序列作为索引
  15. # 因此行号和索引标签都是从0开始的整数序列,并且一一对应相等
  16. print(cell_1)
  17. print(cells_1)
  18. # 切片语法
  19. # loc和iloc属性都可以使用切片的方法进行取值
  20. # 切片的基本表达式为:object[start_index:end_index:step]
  21. # 开始索引 start_index :表示的是开始切片的位置
  22. # 终止索引 end_index: 表示的结束切片的位置
  23. # 步长step :表示切取的步长值,可正可负,step为正时,索引方向为正方向,step为负时,索引方向为负方向,当step值省略时,默认取值为1
  24. # 当未写start_index、end_index的值时,默认从索引的端点处开始或结束(包含端点)
  25. # 取df的第2到第5行,第一列的子集
  26. df.iloc[1:5:1, 0]
  27. df.iloc[1:5, 0]
  28. df.loc[1:4:1, 'Number']
  29. df.loc[1:4, 'Number']
  30. # 以上4个表达式等价,其中iloc的切片包含左端点不包含右端点,loc的切片则包含左右端点
  31. # 当未写左右端点的值是,则默认从开始到结束全部取(包含端点)
  32. # 取第一列的子集
  33. df.iloc[::, 0]
  34. df.iloc[:, 0]
  35. df.loc[::, 'Number']
  36. df.loc[:, 'Number']
  37. # 自行尝试以下切片的结果
  38. df.iloc[0::2, :]
  39. df.iloc[:6:2, :]
  40. df.iloc[:6:-2, :]
  41. df.iloc[::2, :]
  42. df.iloc[:, ::]

2. 数据整理

(1)简单计算

Python常用基础运算符同样适用于Pandas中数值类型的数据(int64和float64),结合前面的对列、行和单元格的获取操作进行计算。

  1. result_1 = df.iloc[0, 1] + df.iloc[0, 2]
  2. # 8.6
  3. result_2 = df.iloc[:, 1] * df.iloc[:, 2]
  4. # 返回series
  5. result_3 = df.iloc[1, :] + df.iloc[2, :]
  6. # 返回series
  7. result_4 = df.iloc[:, 1] / 2
  8. # 返回series
  9. # 分别使用type()查看结果的类型
  10. print(type(result_1))
  11. print(type(result_2))
  12. print(type(result_3))
  13. # 查看结果2和结果3的长度(结果1为float类型,不能调用len())
  14. print(len(result_2), len(result_3))
  15. # 将计算后的结果作为新的行或列加入到原来的df中
  16. df.loc[:, 'result_2'] = result_2
  17. df.loc['result_3', :] = result_3

Pandas的还自带了常用的统计计算函数:

  1. # 最大值、最小值、平均值、标准差、方差、众数、分位数
  2. df.max()
  3. df.min()
  4. df.mean()
  5. df.std()
  6. df.var()
  7. df.mode()
  8. df.quantitle(0.25)
  9. # 以上函数,可以通过参数axis=1改成对每一行求值
  10. df.max(axis=1)
  11. # 还可以对取出来的子集执行上述函数
  12. df.loc[:, 'Sepal.Length'].max()

(2)常用操作

在Pandas中,内置了一部分常用的操作函数,通过这些函数可以快捷的对DataFrame进行操作。

  1. # 查看表格基本描述信息
  2. df.describe()
  3. # 排序,通过ascending的值来控制升序或降序默认ascending=True为升序
  4. df.sort_values(by='Number', ascending=False)
  5. # 加入axis=1参数使得按行进行排序
  6. df.iloc[:, 0:5].sort_values(by=1, axis=1)
  7. # 去重
  8. df.drop_duplicates(subset='Species')
  9. # 去掉包含空值的行
  10. # 替换空值
  11. df.fillna('这是一个空值')
  12. # 删除行或列
  13. # 删除标签为0的行
  14. df.drop(labels=0)
  15. # 删除索引号为0的行
  16. df.drop(index=0)
  17. # 删除列名为Number的列
  18. df.drop(columns='Number')
  19. # 将某一列设置为索引
  20. df.set_index(keys='Species')
  21. # 取消现有索引
  22. df.reset_index(level='Species')
  23. # 上述常用函数中,调用的结果都是返回一个新的DataFrame,并不会改变原来的DataFrame的值
  24. # 如果需要在直接修改原来的DataFrame上,都可以通过加入参数inplace=True来实现(describe函数不行)