python中pandas库教学 函数篇(2)
Pandas库是一种流行的Python数据处理库,它提供了很多有用的数据结构和函数,可以帮助我们处理和分析数据,接下来为大家介绍pandas库中的常用数据分析的函数。
数据读取和写入
- read_csv():从CSV文件中读取数据
- read_excel():从Excel文件中读取数据
- read_sql():从SQL数据库中读取数据
- to_csv():将数据写入CSV文件
- to_excel():将数据写入Excel文件
- to_sql():将数据写入SQL数据库
示例代码:
import pandas as pd
# 从CSV文件中读取数据
data = pd.read_csv('data.csv')
# 将数据写入Excel文件
data.to_excel('data.xlsx', index=False)
参数详解:
1.io:读取 Excel 文件的路径(字符串),或者文件的文件对象(File-like object)。还可以是 HTTP, FTP, S3 等协议的 URL。
sheet_name:指定要读取的工作表名或工作表编号。默认值为 0,表示读取第一个工作表。
2.header:指定表头所在行的索引(以 0 开始),默认为 0,即将第一行作为表头。
3.names:将指定的列名列表作为新的表头。如果设置了 header=None,则此参数必须设置,否则将自动使用数字作为列名。
index_col:将指定的列作为行索引,可以是列名或列编号(以 0 开始)。默认值为 None,即不设置行索引。
数据预处理
- head():返回前几行数据,默认返回前5行
- tail():返回后几行数据,默认返回后5行
- info():返回数据的基本信息,包括列名、数据类型、非空值个数等
- describe():返回数据的基本统计信息,包括均值、标准差、最小值、最大值等
- dropna():删除包含缺失值的行或列
- fillna():用指定的值填充缺失值
- replace():用指定的值替换数据中的特定值
- drop_duplicates():删除重复的行
示例代码:
import pandas as pd
# 返回前5行数据
data.head()
# 返回后5行数据
data.tail()
# 返回数据的基本信息
data.info()
# 返回数据的基本统计信息
data.describe()
# 删除包含缺失值的行或列
data.dropna()
# 用0填充缺失值
data.fillna(0)
# 用指定的值替换数据中的特定值
data.replace({
'male': 0, 'female': 1})
# 删除重复的行
data.drop_duplicates()
dropna()参数详解:
- axis: 指定要删除的轴,axis=0表示删除行,axis=1表示删除列,默认为0。
- how: 指定如何删除缺失值,可以是any或all。any表示删除任何包含缺失值的行或列,all表示只删除全部是缺失值的行或列,默认为any。
- thresh: 指定每行或每列至少需要有多少个非缺失值,否则删除该行或列。
- subset: 指定要检查缺失值的列或行,可以是列或行的标签名称或者标签名称的列表。默认为检查所有列或行。(subset=[‘待删除列’, ‘待删除列’])
- inplace: 指定是否在原始数据上进行修改,如果为True,则在原始数据上进行修改,否则返回一个新的数据副本,默认为False。
数据选择和过滤
- loc[]:通过标签选择行或列
- iloc[]:通过索引选择行或列
- []:通过列名选择列
- query():通过查询条件选择行
- groupby():按照指定的列分组
- pivot_table():根据指定的列生成透视表
示例代码:
import pandas as pd
# 通过标签选择行或列
data.loc[2:4, 'Name':'Age']
# 通过位置选择行或列
data.iloc[2:4, 0:2]
# 通过列名选择列
data['Name']
# 通过查询条件选择行
data.query('Age > 20 and Sex == "male"')
# 按照指定的列分组
data.groupby('Sex').mean()
# 根据指定的列生成透视表
pd.pivot_table(data, values='Age', index=['Sex'], columns=['Pclass'], aggfunc=np.mean)
数据计算和转换
- apply():对每行或每列应用指定的函数
- map():对每个元素应用指定的函数
- agg():对每个分组应用指定的函数
- transform():对每个分组应用指定的函数并返回结果
- merge():合并多个数据集
- concat():沿指定轴将多个数据集连接在一起
- pivot():根据指定的列生成透视表
示例代码:
import pandas as pd
# 对每行或每列应用指定的函数
data.apply(lambda x: x.max() - x.min(), axis=0)
# 对每个元素应用指定的函数
data['Age'].map(lambda x: x * 2)
# 对每个分组应用指定的函数
data.groupby('Sex')['Age'].agg(['mean', 'std'])
# 对每个分组应用指定的函数并返回结果
data.groupby('Sex')['Age'].transform(lambda x: (x - x.mean()) / x.std())
# 合并多个数据集
pd.merge(data1, data2, on='key')
# 沿指定轴将多个数据集连接在一起
pd.concat([data1, data2], axis=0)
# 根据指定的列生成透视表
data.pivot(index='Name', columns='Sex', values='Age')
fillna()函数参数说明
-
value:用于填充缺失值的标量值、字典、Series 或 DataFrame。默认值为 None,即不填充。
-
method:指定填充缺失值的方法。可选的值包括:
ffill 或 pad:使用前面的非缺失值填充缺失值。
bfill 或 backfill:使用后面的非缺失值填充缺失值。 -
nearest:使用最近的非缺失值填充缺失值。
-
axis:指定在哪个轴上进行填充操作。默认为 0,表示填充行缺失值;1 表示填充列缺失值。
-
inplace:是否在原 DataFrame 上修改。默认为 False,即返回新的 DataFrame。
merge()参数说明
- left:要合并的左侧DataFrame。
- right:要合并的右侧DataFrame。
- how:指定如何合并,默认为’inner’,即取交集。还可以是**‘outer’,即取并集**;‘left’,即以左侧DataFrame为准,右侧DataFrame中无对应项时填充缺失值;‘right’,即以右侧DataFrame为准,左侧DataFrame中无对应项时填充缺失值。
- on:指定要进行合并的列名。必须同时存在于左右两个DataFrame中。如果未指定,则会自动使用两个DataFrame中的共同列进行合并。
- left_on:指定左侧DataFrame用于合并的列名。如果未指定,则会自动使用两个DataFrame中的共同列进行合并。
- right_on:指定右侧DataFrame用于合并的列名。如果未指定,则会自动使用两个DataFrame中的共同列进行合并
补充知识:数据透视表
什么是数据透视表?
数据透视表是一种用于对数据进行汇总和分析的数据表格。它是通过将原始数据表格按照特定的方式重新排列而创建的。数据透视表通常用于数据分析、可视化和报告生成等任务,因为它可以使数据更易于理解和分析。
pivot()函数详解
在pivot()函数中,您需要指定三个参数:索引、列和值。索引是要保留在结果表中的列,列是要分组的列,而值是要聚合的列的值。==pivot()==将索引列的唯一值组成新的行,而将列的唯一值组成新的列。然后,将值聚合到新表中的相应单元格中。
例如,假设您有以下数据框:
import pandas as pd
df = pd.DataFrame({
'date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-01', '2022-01-02', '2022-01-03'],
'category': ['A', 'A', 'A', 'B', 'B', 'B'],
'value': [1, 2, 3, 4, 5, 6]
})
pivot_df = df.pivot(index='date', columns='category', values='value')
这将产生以下数据透视表:
category A B
date
2022-01-01 1 4
2022-01-02 2 5
2022-01-03 3 6
数据可视化(应用matplotlib库)
- plot():生成常见的图形,包括折线图、散点图、条形图等
- hist():生成直方图
- boxplot():生成箱线图
- heatmap():生成热力图
- scatter_matrix():生成散点图矩阵
import pandas as pd
import matplotlib.pyplot as plt
# 生成折线图
data.plot(x='Age', y='Fare')
# 生成直方图
data['Age'].hist()
# 生成箱线图
data.boxplot(column='Age', by='Sex')
# 生成热力图
corr = data.corr()
plt.imshow(corr, cmap='hot', interpolation='nearest')
plt.show()
# 生成散点图矩阵
pd.plotting.scatter_matrix(data[['Age', 'Fare', 'Survived']])