Pandas学习日志

Pandas

读写

pd.read_csv(): 读取CSV文件

pd.to_csv(): 写入CSV文件

df.loc[]: 基于标签选择数据

df.iloc[]: 基于位置选择数据

pd.concat(): 将多个数据按照行或列合并

pd.merge(): 按照某列将两个数据合并

df.head(): 查看前几行数据

df.sample(): 随机抽样数据

df.tail(): 查看后几行数据

df.info(): 查看数据基本信息

df.describe(): 查看数据的基本统计信息,包括均值、中位数、标准差、最小值、最大值等

多级索引

pd.MultiIndex: 创建多级索引,其中

从元组创建多级索引。

从列表的交叉积创建多级索引。

pd.set_index(): 将df的某列转换为多重索引

pd.reset_index(): 将多重索引转换为普通列

df.loc[]: 按顺序选择多级索引数据

df.xs(): 按级别选择多级索引数据

df.sort_index(): 按多重索引排序

df.groupby(): 按多重索引分组

df.fillna(): 填充多重索引的缺失值

df.dropna(): 删除多重索引的缺失值

性能优化

df.astype(): 将某列转换为指定数据类型;
Pandas默认的数据类型是int64float64,但在某些情况下,使用更小的数据类型可以节省内存空间和提高计算速度。例如,可以将整数类型转换为int8int16int32,将浮点数类型转换为float32
对具有重复值的字符串列使用category数据类型,可以显著减少内存使用。因为category类型只存储唯一值的索引,而不是每个值的完整字符串;
df.downcast(): 将某列转换为更小的数据类型。

尽量采用向量化操作,避免使用for循环遍历DataFrame的行或列。Pandas提供了许多内置函数和方法,可以对整个列或行进行操作,而不需要显式地循环;
使用df.apply()df.applymap()df.map()等方法对列或行进行操作更高效;
使用df.eval()df.query()方法,可以在DataFrame中执行复杂的表达式和查询,而不需要显式地编写循环或条件语句。

使用索引切片分块操作,可以快速访问和修改DataFrame中的数据,而不需要遍历整个DataFrame。
当需要将多个DataFrame合并时(如pd.merge()pd.concat,特别是在处理大数据集时需要注意优化合并操作。可以使用on和how参数明确指定合并方式,避免不必要的计算。

通过numba库,可以将Python代码编译为机器码,从而提高代码的执行速度。Pandas与numba集成,可以使用@numba.jit装饰器来加速自定义函数。

避免链式赋值(如df['A'][df['A'] > 2] = 0),因为它可能导致意外的结果和性能问题。应使用单明确的赋值语句(如df.loc[df['A'] > 2, 'A'] = 0)。

数据清洗

df.set_index(): 将某列设置为索引

df.reset_index(): 把索引重置为普通列

df.isna(): 检测缺失值

df.fillna(): 填充缺失值

df.dropna(): 删除缺失值

df.duplicated(): 检测重复值

df.drop_duplicates(): 删除重复值

df.replace(): 替换值

pd.to_numeric(): 将某列转换为数值类型

pd.to_datetime(): 将某列转换为日期时间类型

pd.get_dummies(): 将某列转换为独热编码

df.sort_values(): 按某列排序

df.groupby(): 按某列分组

df.agg(): 对分组数据进行聚合计算

df.eval(): 使用字符串表达式计算新列

df.query(): 使用字符串表达式过滤数据

df.apply(): 对某列或行应用函数

df.applymap(): 对整个DataFrame应用函数

df.map(): 对某列应用函数

pd.date_range(): 生成指定频率的日期范围

pd.Timedelta(): 计算时间差

df.rolling(): 计算滚动窗口统计量(固定窗口大小)

df.expanding(): 计算扩展窗口统计量(只有最小预测数)

数据分析

df.mean(): 计算均值

df.median(): 计算中位数

df.mode(): 计算众数

df.count(): 计算非缺失值的数量

df.corr(): 计算相关系数,其中

皮尔逊相关系数,衡量线性关系,其中-1表示完全负相关,1表示完全正相关,0表示无相关性。

斯皮尔曼相关系数,衡量线性关系,其中-1表示完全负相关,1表示完全正相关,0表示无相关性。

肯德尔相关系数,衡量线性关系,其中-1表示完全负相关,1表示完全正相关,0表示无相关性。

只用df.corr()可计算相关性矩阵
可用import seaborn as snssns.heatmap()可视化相关性矩阵

df.plot(): 绘制数据图表,其中
kind='line': 折线图;
kind='bar': 条形图;
kind='barh': 横向条形图;
kind='hist': 直方图;
kind='scatter': 散点图;
kind='box': 箱线图;
kind='kde': 密度分布图;
kind='pie': 饼状图;
kind='area': 面积图

pd.pivot_table(): 创建数据透视表,对一个或多个数值指标按行/列维度做聚合(mean、sum、std、count、quantile等)

pd.crosstab(): 计算两个或多个分类变量计算频次/比例的列联表