pandas常⽤函数详解1 import语句
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import re
2 ⽂件读取
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的字典
3 数据预处理
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)#删除指定列,也可以删除⾏
columns={'col1':'A1'})
def get_digits(str):
m = re.match(r'(\d+(\.\d+)?)', str.decode('utf-8'))
if m is not None:
return ups()[0])
else:
return 0
df.apply(get_digits) DataFrame.apply #只获取⼩数部分,可以选定某⼀列或⾏
df['col1'].map(func) Series.map #只对列进⾏函数转换
<(df1, df2, on='col1',how='inner',sort=True)#合并两个DataFrame,按照共有的某列做内连接(交集),outter为外连接(并集),结果排序pd.merge(df1, df2, left_on='col1',right_on='col2')#df1 df2没有公共列名,所以合并需指定两边的参考列
df1bine_first(df2)#⽤df2的数据补充df1的缺省值NaN,如果df2有更多⾏,也⼀并补上
df.stack()#列旋转成⾏,也就是列名变为索引名,原索引变成多层索引,结果是具有多层索引的Series,实际上是把数据集拉长
df.unstack()#将含有多层索引的Series转换为DataFrame,实际上是把数据集压扁,如果某⼀列具有较少类别,那么把这些类别拉出来作为列
df.pivot()#实际上是unstack的应⽤,把数据集压扁
<_dummies(df['col1'], prefix='key')#某列含有有限个值,且这些值⼀般是字符串,例如国家,借鉴位图的思想,可以把k个国家这⼀列量化成k列,每列⽤0、1表⽰
4 数据筛选
df.index #索引名,返回Index类型的索引的集合
df.shape #返回tuple,⾏x列
df.head(n=N)#返回前N条
df.tail(n=M)#返回后M条
import语句df.values #值的⼆维数组,以numpy.ndarray对象返回
df.index #DataFrame的索引,索引不可以直接赋值修改
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对象返回
5 数据运算与排序
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
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.max()#求最⼤值
df.min()#求最⼤值
df.sum(axis=0)#按各列求和
df.var()#求⽅差
df.std()#求标准差
df.mad()#根据平均值计算平均绝对利差
df.cumsum()#求累计和
<(sr2)#求相关系数
pd.cut(array1, bins)#求⼀维数据的区间分布
pd.qcut(array1, 4)#按指定分位数进⾏区间划分,4可以替换成⾃定义的分位数列表
df['col1'].groupby(df['col2'])#列1按照列2分组,即列2作为key
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做分组聚合,聚合⽅法可以指定多种,并⽤指定值替换缺省值

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。