博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pandas常用函数
阅读量:5162 次
发布时间:2019-06-13

本文共 3907 字,大约阅读时间需要 13 分钟。

1 import语句

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport datetimeimport re

2 读取文件

df = pd.read_csv(path='file.csv')参数:header=None 用默认列名,0,1,2,3...names=['A', 'B', 'C'...] 自定义列名index_col='A'|['A', 'B'...] 给索引列指定名称,如果是多重索引,可以传listskiprows=[0,1,2] 需要跳过的行号,从文件头0开始,skip_footer从文件尾开始nrows=N 需要读取的行数,前N行chunksize=M 返回迭代类型TextFileReader,每M条迭代一次,数据占用较大内存时使用sep=':'数据分隔默认是',',根据文件选择合适的分隔符,如果不指定参数,会自动解析skip_blank_lines=False 默认为True,跳过空行,如果选择不跳过,会填充NaNconverters={'col1', func} 对选定列使用函数func转换,通常表示编号的列会使用(避免转换成int)dfjs = pd.read_json('file.json') 可以传入json格式字符串dfex = pd.read_excel('file.xls', sheetname=[0,1..]) 读取多个sheet页,返回多个df的字典

3 数据预处理

df.duplicated() 返回各行是否是上一行的重复行df.drop_duplicates() 删除重复行,如果需要按照列过滤,参数选填['col1', 'col2',...]df.fillna(0) 用实数0填充nadf.dropna() axis=0|1 0-index 1-columnhow='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 0df.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堆叠成多行,结果仍然是一个Seriespd.concat([sr1, sr2, sr3,...], axis=1) 多个Series组合成多行多列,结果是一个DataFrame,索引取并集,没有交集的位置填入缺省值NaNdf1.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表示

4 数据筛选

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'] 取某一列,返回Seriessr.values Series的值,以numpy.ndarray对象返回sr.index Series的索引,以index对象返回

5 数据运算与排序

df.T DataFrame转置df1 + df2 按照索引和列相加,得到并集,NaN填充df1.add(df2, fill_value=0) 用其他值填充df1.add/sub//mul/div 四则运算的方法df - sr DataFrame的所有行同时减去Seriesdf * N 所有元素乘以Ndf.add(sr, axis=0) DataFrame的所有列同时减去Seriessr.order() Series升序排列df.sort_index(aixs=0, ascending=True) 按行索引升序df.sort_index(by=['col1', 'col2'...]) 按指定列优先排序df.rank() 计算排名rank值

6 数学统计

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作为keydf.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']) 交叉表,计算分组的频率

  

 

转载于:https://www.cnblogs.com/kimi765096/p/9543444.html

你可能感兴趣的文章
go条件语句
查看>>
css使用的三种方式
查看>>
C#中Const和Readonly的区别
查看>>
Noip2016day2 组合数问题problem
查看>>
django中widget小部件
查看>>
训练记录
查看>>
使用 Windows Live ID 登录 Windows 8---------互联网时代的云端革命
查看>>
横屏模式注意点
查看>>
虚拟机对网卡的设置
查看>>
after()和inserAfter(),before()和inserBefore()区别
查看>>
JDBC——释放资源的代码
查看>>
bootstrap模态框垂直居中
查看>>
用数据管理过程(3)——可预测级别的量化管理(麦当劳的管理方式)
查看>>
DataGridView的Validating事件注册后删除操作的处理
查看>>
我的IOS学习历程-第七天
查看>>
json的两种表示结构(对象和数组).。
查看>>
iOS Undefined symbols for architecture xxx问题的总结
查看>>
bzoj 3685: 普通van Emde Boas树
查看>>
关于线程池,那些你还不知道的事
查看>>
二分类问题F-score评判指标(转载)
查看>>