5.2 pandas 常用函数清单
文件读取
|
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.column
=
col_lst 重新制定列名
df.rename(index``=``{``'row1'``:``'A'``}, 重命名索引名和列名
columns``=``{``'col1'``:``'A1'``})
df.replace(``dict``) 替换df值,前后值可以用字典表,{``1``:‘A’,
'2'``:``'B'``}
def
get_digits(``str``):
m
=
re.match(r``'(\d+(\.\d+)?)'``,
str``.decode(``'utf-8'``))
if
m
is
not
None``:
return
float``(m.groups()[``0``])
else``:
return
0
df.``apply``(get_digits) DataFrame.``apply``,只获取小数部分,可以选定某一列或行
df[``'col1'``].``map``(func) Series.``map``,只对列进行函数转换
pd.merge(df1, df2, on``=``'col1'``,
how``=``'inner'``,sort``=``True``) 合并两个DataFrame,按照共有的某列做内连接(交集),outter为外连接(并集),结果排序
pd.merge(df1, df2, left_on``=``'col1'``,
right_on``=``'col2'``) df1 df2没有公共列名,所以合并需指定两边的参考列
pd.concat([sr1, sr2, sr3,...], axis``=``0``) 多个Series堆叠成多行,结果仍然是一个Series
pd.concat([sr1, sr2, sr3,...], axis``=``1``) 多个Series组合成多行多列,结果是一个DataFrame,索引取并集,没有交集的位置填入缺省值NaN
df1.combine_first(df2) 用df2的数据补充df1的缺省值NaN,如果df2有更多行,也一并补上
df.stack() 列旋转成行,也就是列名变为索引名,原索引变成多层索引,结果是具有多层索引的Series,实际上是把数据集拉长
df.unstack() 将含有多层索引的Series转换为DataFrame,实际上是把数据集压扁,如果某一列具有较少类别,那么把这些类别拉出来作为列
df.pivot() 实际上是unstack的应用,把数据集压扁
pd.get_dummies(df[``'col1'``], prefix``=``'key'``) 某列含有有限个值,且这些值一般是字符串,例如国家,借鉴位图的思想,可以把k个国家这一列量化成k列,每列用``0``、``1``表示
|
数据筛选
|
df.columns 列名,返回Index类型的列的集合
df.index 索引名,返回Index类型的索引的集合
df.shape 返回``tuple``,行x列
df.head(n``=``N) 返回前N条
df.tail(n``=``M) 返回后M条
df.values 值的二维数组,以numpy.ndarray对象返回
df.index DataFrame的索引,索引不可以直接赋值修改
df.reindex(index``=``[``'row1'``,
'row2'``,...]
columns``=``[``'col1'``,
'col2'``,...]) 根据新索引重新排序
df[m:n] 切片,选取m~n``-``1``行
df[df[``'col1'``] >
1``] 选取满足条件的行
df.query(``'col1 > 1'``) 选取满足条件的行
df.query(``'col1==[v1,v2,...]'``)
df.ix[:,``'col1'``] 选取某一列
df.ix[``'row1'``,
'col2'``] 选取某一元素
df.ix[:,:``'col2'``] 切片选取某一列之前(包括col2)的所有列
df.loc[m:n] 获取从m~n行(推荐)
df.iloc[m:n] 获取从m~n``-``1``行
df.loc[m:n``-``1``,``'col1'``:``'coln'``] 获取从m~n行的col1~coln列
sr``=``df[``'col'``] 取某一列,返回Series
sr.values Series的值,以numpy.ndarray对象返回
sr.index Series的索引,以index对象返回
|
数据运算与排序
|
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.order() Series升序排列
df.sort_index(aixs``=``0``, ascending``=``True``) 按行索引升序
df.sort_index(by``=``[``'col1'``,
'col2'``...]) 按指定列优先排序
df.rank() 计算排名rank值
|
数学统计
|
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'``],
rows``=``[``'row1'``,
'row2'``],
aggfunc``=``[np.mean, np.``sum``]
fill_value``=``0``,
margins``=``True``) 根据row1, row2对col1, col2做分组聚合,聚合方法可以指定多种,并用指定值替换缺省值
pd.crosstab(df[``'col1'``], df[``'col2'``]) 交叉表,计算分组的频率
|
收藏了