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默认的数据类型是int64和float64,但在某些情况下,使用更小的数据类型可以节省内存空间和提高计算速度。例如,可以将整数类型转换为int8、int16或int32,将浮点数类型转换为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 sns和sns.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(): 计算两个或多个分类变量计算频次/比例的列联表