文件读取
读取参数
df = pd.read_csv(path='file.csv')
# 参数:
# header=None 用默认列名,0,1,2,3...
# names=['A', 'B', 'C...'] 自定义列名
# index_col='A'|['A', 'B'...] 给索引列指定名称,如果是多重索引,可以传list
# skiprows=[0,1,2] 需要跳过的行号,从文件头0开始,skip_footer从文件尾开始
# nrows=N 需要读取的行数,前N行
# chunksize=M 返回迭代类型TextFileReader,每M条迭代一次,数据占用较大内存时使用
# sep=':'数据分隔默认是',',根据文件选择合适的分隔符,如果不指定参数,会自动解析
# skip_blank_lines=False 默认为True,跳过空行,如果选择不跳过,会填充NaN
# converters={'col1', func} 对选定列使用函数func转换,通常表示编号的列会使用(避免转换成int)
其他格式
dfjs = pd.read_json('file.json') # 可以传入json格式字符串
dfex = pd.read_excel('file.xls', sheetname=[0,1..]) # 读取多个sheet页,返回多个df的字典
数据预处理
df.duplicated() # 返回各行是否是上一行的重复行
df.drop_duplicates() # 删除重复行,如果需要按照列过滤,参数选填['col1', 'col2',...]
df.fillna(0) # 用实数0填充na
df.dropna() # axis=0|1 0-index 1-column
# how='all'|'any' all-全部是NA才删 any-只要有NA就全删
del df['col1'] # 直接删除某一列
df.drop(['col1',...], aixs=1) # 删除指定列,也可以删除行
df.columns = col_lst # 重新制定列名
df.rename(index={'row1':'A'}, # 重命名索引名和列名
columns={'col1':'A1'})
df.replace(dict) # 替换df值,前后值可以用字典表,{1:‘A’, '2':'B'}
数据运算与排序
df.T # DataFrame转置
df1 + df2 # 按照索引和列相加,得到并集,NaN填充
df1.add(df2, fill_value=0) # 用其他值填充
df1.add/sub//mul/div # 四则运算的方法
df - sr # DataFrame的所有行同时减去Series
df * N # 所有元素乘以N
df.add(sr, axis=0) # DataFrame的所有列同时减去Series
数学统计
sr.unique() # Series去重
sr.value_counts() # Series统计频率,并从大到小排序,DataFrame没有这个方法
sr.describe() # 返回基本统计量和分位数
df.describe() # 按各列返回基本统计量和分位数
df.count() # 求非NA值得数量
df.max() # 求最大值
df.min() # 求最小值
df.sum(axis=0) # 按各列求和
df.mean() # 按各列求平均值
df.median() # 求中位数
df.var() # 求方差
df.std() # 求标准差
df.mad() # 根据平均值计算平均绝对利差
df.cumsum() # 求累计和
sr1.corr(sr2) # 求相关系数
df.cov() # 求协方差矩阵
df1.corrwith(df2) # 求相关系数
pd.cut(array1, bins) # 求一维数据的区间分布
pd.qcut(array1, 4) # 按指定分位数进行区间划分,4可以替换成自定义的分位数列表
分组与聚合
df['col1'].groupby(df['col2']) # 列1按照列2分组,即列2作为key
df.groupby('col1') # DataFrame按照列1分组
grouped.aggreagte(func) # 分组后根据传入函数来聚合
grouped.aggregate([f1, f2,...]) # 根据多个函数聚合,表现成多列,函数名为列名
grouped.aggregate([('f1_name', f1), ('f2_name', f2)]) # 重命名聚合后的列名
grouped.aggregate({'col1':f1, 'col2':f2,...}) # 对不同的列应用不同函数的聚合,函数也可以是多个
df.pivot_table(['col1', 'col2'], # 根据row1, row2对col1, col2做分组聚合,聚合方法可以指定多种,并用指定值替换缺省值
rows=['row1', 'row2'],
aggfunc=[np.mean, np.sum]
fill_value=0,
margins=True)
pd.crosstab(df['col1'], df['col2']) # 交叉表,计算分组的频率