Pandas参考手册、常用函数及方法汇总

一、入门与升级宝典

如果个人时间充裕,可以去官网查看文档信息

官网链接:http://pandas.pydata.org

pandas参考文档:http://pandas.pydata.org/pandas-docs/stable/index.html

二、常用的函数和方法

创建测试对象:

  • pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
  • pd.Series(my_list):从可迭代对象my_list创建一个Series对象
  • df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一个日期索引

df为某个读入进来的数据帧。

需知:

       axis的参数:0(index)  逐行   

                           1 (column)   逐列

1.导入数据

  • pd.read_csv(filename):从CSV文件导入数据

  • pd.read_table(filename):从限定分隔符的文本文件导入数据

  • pd.read_excel(filename):从Excel文件导入数据

  • pd.read_sql(query, connection_object):从SQL表/库导入数据

  • pd.read_json(json_string):从JSON格式的字符串导入数据

  • pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格

  • pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()

  • pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

  • pd.ExcelFile(Filename): 从Excel中读取数据,sheet_names查看相应sheet, parse方法解析某个sheet

2.导出数据

  • df.to_csv(filename):导出数据到CSV文件
  • df.to_excel(filename):导出数据到Excel文件
  • df.to_sql(table_name, connection_object):导出数据到SQL表
  • df.to_json(filename):以Json格式导出数据到文本文件
  • writer=pd.ExcelWriter('test.xlsx',index=False)  :然后调用df1.to_excel(writer,sheet_name='单位') 和 writer.save(),将多个数据帧写入同一个工作簿的多个sheet(工作表)

3.查看、检查数据

  • df.head(n):查看DataFrame对象的前n行
  • df.tail(n):查看DataFrame对象的最后n行
  • df.shape():查看行数和列数
  • df.info():查看索引、数据类型和内存信息
  • df.columns():查看字段(首行)名称
  • df.describe():查看数值型列的汇总统计
  • s.value_counts(dropna=False):查看Series对象的唯一值和计数
  • df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
  • df.isnull().any(): 查看是否有缺失值
  • df[df[column_name].duplicated()]:查看column_name字段数据重复的数据信息
  • df[df[column_name].duplicated()].count():查看column_name字段数据重复的个数
  • df[col1].unique() :查看col1字段的唯一值
  • df[col1].nunique():查看col1字段唯一值个数

4.数据选取

  • df[col]:根据列名,并以Series的形式返回列
  • df[[col1, col2]]:以DataFrame形式返回多列
  • s.iloc[0]:按位置选取数据
  • s.loc['index_one']:按索引选取数据
  • df.iloc[0,:]:返回第一行
  • df.iloc[0,0]:返回第一列的第一个元素
  • df.loc[0,:] : 返回第一行(索引为默认的数字时,用法同df.iloc),但需要注意的是loc是按索引,iloc参数只接受数字参数
  • df.ix[[:5],["col1","col2"]] : 返回字段为col1和col2的前5条数据,可以理解为loc和iloc的结合体。
  • df.at[5,"col1"] :选择索引名称为5,字段名称为col1的数据
  • df.iat[5,0]  : 选择索引排序为5,字段排序为0的数据
  • data.str.contains("s") : 数据中含有"s"字符串的数据
  • data.astype(int).isin(list1) :数据的某条数据的某个字段在列表list1中的数据
  • df[-df[column_name].duplicated()] :选取column_name字段不重复的数据,支持df[-df.duplicated()]
  • df.loc[df['col_name']==value]:选取col_name字段为value的数据
  • df.loc[df['col_name'].isin(value_list)]:选取col_name字段为value_list中的值的数据
  •  df.loc[~df['col_name'].isin(value_list)]:选取col_name字段不在value_list中的值的数据
  • df.loc[(df[‘col_name1’] == value1) & df[‘col_name2’].isin(value_list)]:选取col_name1等于value1,并且col_name2在value_list中的数据
  • df.loc[df[‘col_name’] != value2]:选取col_name字段不等于value2的数据

5.数据清理

  • df.columns = ['a','b','c']:重命名列名(需要将所有列名列出,否则会报错)
  • pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
  • pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
  • df.dropna():删除所有包含空值的行
  • df.dropna(axis=1):删除所有包含空值的列
  • df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
  • df.fillna(x):用x替换DataFrame对象中所有的空值,支持df[column_name].fillna(x)
  • s.astype(float):将Series中的数据类型更改为float类型
  • s.replace(1,'one'):用‘one’代替所有等于1的值
  • s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
  • df.rename(columns=lambda x: x + 1):批量更改列名
  • df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
  • df.set_index('column_one'):将某个字段设为索引,可接受列表参数,即设置多个索引
  • df.reset_index("col1"):  将索引设置为col1字段,并将索引新设置为0,1,2...
  • df.rename(index=lambda x: x + 1):批量重命名索引

6.数据处理:Filter、Sort和GroupBy

  • df[df[col] > 0.5]:选择col列的值大于0.5的行
  • df.sort_index().loc[:5]:对前5条数据进行索引排序 
  • df.sort_values(col1):按照列col1排序数据,默认升序排列
  • df.sort_values(col2, ascending=False):按照列col1降序排列数据
  • df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
  • df.groupby(col):返回一个按列col进行分组的Groupby对象
  • df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
  • df.groupby(col1)[col2].agg(mean):返回按列col1进行分组后,列col2的均值,agg可以接受列表参数,agg([len,np.mean])
  • df.pivot_table(index=col1, values=[col2,col3], aggfunc={col2:max,col3:[ma,min]}):创建一个按列col1进行分组,计算col2的最大值和col3的最大值、最小值的数据透视表
  • df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值,支持df.groupby(col1).col2.agg(['min','max'])
  • data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
  • data[[col1,col2]].apply(np.max,axis=1):对DataFrame中的col1和col2字段的每一行应用函数np.max,即取两者的最大值
  • data[col1].map(lambda x:str(x)): 将col1字段的每一行数据转为字符串,同data[col1].apply(lambda x:str(x))
  • data[col1].map(lambda x:float(x[1:-1])) : 改变数据类型为浮点数
  • df.groupby(col1).col2.transform("sum"):通常与groupby连用,避免索引更改
  • df.set_index("date").groupby([col1,pd.Grouper(freq="M")]).agg(sum): 将某列时间设置为索引,并按照月份求和
  • df.groupby(col1,as_index=False).agg(sum).loc[:,[col2,col3]]: 按照col1字段对 col2和col3进行聚合求和,并避免col1被设置为索引

7.数据合并

  • df1.append(df2):将df2中的行添加到df1的尾部
  • df.concat([df1, df2],axis=1,join='inner'):将df2中的列添加到df1的尾部,值为空的对应行与对应列都不要
  • df1.join(df2.set_index(col1),on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join,默认按照索引来进行合并,如果df1和df2有共同字段时,会报错,可通过设置lsuffix,rsuffix来进行解决,如果需要按照共同列进行合并,就要用到set_index(col1)
  • pd.merge(df1,df2,on='col1',how='outer') :对df1和df2合并,按照col1,方式为outer 
  • pd.merge(df1, df2, left_index=True, right_index=True, how='outer')  与  df1.join(df2, how='outer') 效果相同

8.数据统计

  • df.describe():查看数据值列的汇总统计
  • df.mean():返回所有列的均值
  • df.corr():返回列与列之间的相关系数
  • df.count():返回每一列中的非空值的个数
  • df.max():返回每一列的最大值
  • df.min():返回每一列的最小值
  • df.median():返回每一列的中位数
  • pd.date_range('1/1/2000', periods=7)
  • df.std():返回每一列的标准差

9.时间处理

  • pd.date_range('1/1/2018',periods=7) : 指定开始的时间为2018-1-1,周期为7,生成一系列时间(时间格式不固定)
  • pd.to_datetime(df['date'])  : 将date列的数据类型转为datetime类型
  • df.to_period('Q')  :季度,按照不同维度划分(w,m,y,Q) 
  • df[['date','time']] = df['deal_time'].radd(' ').str.rsplit(' ', n=1, expand=True)  :拆分日期和时间

三、其他常用

1.pipe

将  f(g(h(df), arg1=a), arg2=b, arg3=c) 形式化为

(df.pipe(h)
...    .pipe(g, arg1=a)
...    .pipe((f, 'arg2'), arg1=a, arg3=c)
...  )

2.series转为dataframe

s.to_frame()     将格式为series的s转为dataframe,索引不会发生变化;
#该方法索引会发生变化
dict_s = {"col1":s.index,"col2":s.values}    
df=pd.DataFrame(dict_s)    

3.计算时间差

比如需要计算df中time1和time2的时间差

#方法1(直接进行加减)
df['diff']=(df['time2']-df['time1']).dt.days
#方法2(apply)
def time_diff(data,before,after):
    dt1=data[before]
    dt2=data[after]
    days=(dt2-dt1).days
    return days
df['diff']=df.apply(time_diff,axis=1,args=("time1","time2"))         #调用方式1
#df['diff']=df.apply(time_diff,axis=1,before="time1",after="time2")   #调用方式2
#df['diff']=df.apply(time_diff,axis=1,**{before:"time1",after:"time2"})  #调用方式3

 

你可能感兴趣的:(数据分析,pandas进行数据处理)