Pandas是基于NumPy的一种工具,专门用于解决数据分析任务。Pandas提供了大量便于快速处理数据的函数和方法,本文将其中常用的部分进行汇总记录。
1. 文件处理
# 读取文件
df = pd.read_csv(path='file.csv')
"""
参数:
header=None # 文件中不包含列名,df默认为0, 1, 2, 3...
names=['A', 'B', 'c', ...] # 自定义列名
skiprows=[0, 1, 2] # 需要跳过的行号,从文件头0开始
nrows=N # 需要读取的行数
chunksize=M # 每M次迭代一次,返回TextFileReader类型,用于大文件
encoding=None # 'ansi', 'utf-8', 'big5'
"""
dfex = pd.read_excel('file.xlsx', sheetname=[0, 1]) # 读取多个sheet页,返回df字典
# 保存文件
df.to_csv('./data/data_extracted.csv', encoding='gbk', index=None)
# 合并文件
pd.merge(df1, df2, on='common_col', how='inner', sort=True) # 按照公共列合并两个DataFrame,inner/outer为交集/并集
pd.merge(df1, df2, left_on='col1', right_on='col2') # df1,df2无公共列名,需指定两边的参考列
2. 数据查看
# 数据查看
df.shape # 查看数据维度
df.head(n=N) # 前N行
df.tail(n=M) # 后M行
df.values() # 值的二维数组,numpy.ndarray. 推荐使用df.to_numpy()
df.columns # 列明,可以直接通过赋值修改
df.index # 索引名,不可以直接赋值修改
df.reindex(index=['row1', 'row2'], columns=['col1', 'col2']) # 根据新索引重新排序
# 数据选择
df[m:n]
df[df['col1'] > 1] # 选取满足条件的行
df.query('col1 > 1') # 选取满足条件的行
df.iloc[m:n] # 根据index选取行或列,m-(n-1)行
df.loc['1':'m', 'col1':'coln'] # 根据index名称和columns选取区域,1-m行1-n列
3. 数据处理
# 重复、nan处理
df.duplicated() # 返回各行是否是上一行的重复
df.drop_duplicates() # 删除重复行,可根据列过滤
df.fillna(0) # 实数0填充nan
df.dropna(axis=0, how='all') # 删除值全为nan的行 (axis:0/1, how:'all'/'any')
# 删除
del df['col'] # 直接删除某一列
df.drop(list(range(5)), axis=0) # 删除前5行
df.drop(['col1', 'col2'], axis=1) # 删除指定列
new_index = df.reset_index(drop=False) # drop=True时重置df的索引
# 行列index重命名
df.rename(index={'row1':'A'},
columns={'col1':'A1'}
df.replace(20, 30) # 将20替换为30
df['col1'].map(func) # Series.map, 只对列进行函数转换
df.stack() # 将二维数据压缩为一维,按属性组合: rows, cols -> (row * cols), 1
df.unstack() # 如果某一列具有较少类别,就把这些类别拉出来做为列
df.pivot() # 将数据集压扁
4. 数据运算与排序
df.T # DataFrame转置
df1 + df2 # 按照索引和列相加,得到并集,NaN填充
df * N # 所有元素乘以N
df.sort_index(axis=0, ascending=True) # 按行索引升序排列
df.sort_index(by=['col1', 'col2']) # 按指定列优先排序
参考文献
[1] pandas常用函数