欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python:Pandas详细总结

程序员文章站 2022-07-07 19:29:35
在第一次学习Pandas的过程中,你会发现你需要记忆很多的函数和方法。所以在这里我们汇总一下Pandas官方文档中比较常用的函数和方法,以方便大家记忆。1. 关键缩写和包导入首先导入pandas库,一般都会用到numpy库,所以一般会先导入备用在这个速查手册中,我们使用如下缩写:df:任意的Pandas DataFrame对象s:任意的Pandas Series对象同时做如下的引入:import pandas as pdimport numpy as np2. 导入/导出数据导入数据...

在第一次学习Pandas的过程中,你会发现你需要记忆很多的函数和方法。所以在这里我们汇总一下Pandas官方文档中比较常用的函数和方法,以方便大家记忆。

1. 关键缩写和包导入

首先导入pandas库,一般都会用到numpy库,所以一般会先导入备用
在这个速查手册中,我们使用如下缩写:

df:任意的Pandas DataFrame对象
s:任意的Pandas Series对象

同时做如下的引入:

import pandas as pd
import numpy as np

2. 导入/导出数据

导入数据:

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是数据

导出数据:

df.to_csv(filename) #导出数据到CSV文件
df.to_excel(filename) #导出数据到Excel文件
df.to_sql(table_name, connection_object) #导出数据到SQL表
df.to_json(filename) #以Json格式导出数据到文本文件

3. 查看检查数据

df.head(n) #查看DataFrame对象的前n行,默认是前10行
df.tail(n) #查看DataFrame对象的最后n行,默认是后10行
df.shape() #查看行数和列数
df.info() #查看索引、数据类型和内存信息
df.describe() #查看数值型列的汇总统计,可显示数据的数量、缺失值、最小最大数、平均值、分位数等信息
s.value_counts(dropna=False) #查看Series对象的唯一值和计数
df.apply(pd.Series.value_counts) #查看DataFrame对象中每一列的唯一值和计数
df.dtypes #每一列数据的格式
df['B'].dtype #某一列(B)的格式
df.index #获取行索引
df.columns #获取列索引
df.axes #获取行及列索引
df.T #Index与Columns对调

示例:DataFrame()函数的参数index的值相当于行索引,若不手动赋值,将默认从0开始分配。columns的值相当于列索引,若不手动赋值,也将默认从0开始分配。

#创建一个DataFrame
data = {
        '性别':['男','女','女','男','男'],
        '姓名':['小明','小红','小芳','大黑','张三'],
        '年龄':[20,21,25,24,29]}
df = pd.DataFrame(data,index=['one','two','three','four','five'],
               columns=['姓名','性别','年龄','职业'])
df

运行结果:
Python:Pandas详细总结

4. 数据选取与清理

数据选取:

df[col] #根据列名,并以Series的形式返回列
df[[col1, col2]] #以DataFrame形式返回多列
s.iloc[0] #按位置选取数据
s.loc['index_one'] #按索引选取数据
df.iloc[0,:] #返回第一行
df.iloc[0,0] #返回第一列的第一个元素

数据清理:

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['price'].astype('int')  #更改数据格式,将Dataframe中的数据类型更改为int类型
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.rename(index=lambda x: x + 1) #批量重命名索引
df['city'].drop_duplicates() #删除列City中后出现的重复值
df['city'].drop_duplicates(keep='last') #删除列City中先出现的重复值

5. 数据处理、合并与统计

数据处理:

df[df[col] > 0.5] #选择col列的值大于0.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] #返回按列col1进行分组后,col2的均值
df.groupby('city')['id'].count() #按列City对id字段进行计数,即相同的City名的数量分别为多少个
df.groupby('city')['price'].agg([len,np.sum, np.mean]) #对city字段进行汇总,并分别计算prince的合计和均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max) #创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean) #返回按列col1分组的所有列的均值
data.apply(np.mean) #对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1) #对DataFrame中的每一行应用函数np.max

数据合并:

df1.append(df2) #将df2中的行添加到df1的尾部
df.concat([df1, df2],axis=1) #将df2中的列添加到df1的尾部
df1.join(df2,on=col1,how='inner') #对df1的列和df2的列执行SQL形式的join
df_inner=pd.merge(df,df1,how='inner') # 匹配合并,交集
df_left=pd.merge(df,df1,how='left') #对df1的列和df2的列执行SQL形式的左连接
df_right=pd.merge(df,df1,how='right') #对df1的列和df2的列执行SQL形式的右连接
df_outer=pd.merge(df,df1,how='outer') #匹配合并,并集
df.set_index('id') #设置索引列
df.sort_values(by=['age']) #按照特定列的值排序
df.sort_index() #按照索引列排序

数据统计:

df.describe() #查看数据值列的汇总统计
df.mean() #返回所有列的均值
df.corr() #返回列与列之间的相关系数
df.count() #返回每一列中的非空值的个数
df.max() #返回每一列的最大值
df.min() #返回每一列的最小值
df.median() #返回每一列的中位数
df.std() #返回每一列的标准差
df['price'].std() #返回列price的标准差
df.cov() #数据表中所有字段间的协方差
df['price'].cov(df['m-point']) #计算两个字段间(price字段和m-point字段)的协方差

6. 数据筛选

使用与、或、非三个条件配合大于、小于、等于对数据进行筛选,并进行计数和求和
使用“与”进行筛选,符号为&:

df_inner.loc[(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']] 
#列age的值大于25,同时列City中的值为beijing的行会被筛选出来,

使用“或”进行筛选,符号为|:

df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age']) 
#列age的值大于25,或者列City中的值为beijing的行都会被筛选出来

#使用“非”条件进行筛选,符号为!=:

df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']) 
#列City中的值不等于beijing的行都会被筛选出来

参考文献:

  1. https://blog.csdn.net/liufang0001/article/details/77856255

本文地址:https://blog.csdn.net/pantingd/article/details/107149300