Pandas

1. 学习路线

在这里插入图片描述

2. pandas库

数据类型

类型数据
字符串类型object
整数类型Int64,Int32,Int16, Int8
无符号整数UInt64,UInt32,UInt16, UInt8
浮点数类型float64,float32
日期和时间类型datetime64[ns]、datetime64[ns, tz]、timedelta[ns]
布尔bool

显示设置

语句作用
pd.set_option(‘display.max_rows’, 100)显示的最大行数,如果超额就显示省略号
pd.set_option(‘display.max_columns’, 100)显示的最大列数,如果超额就显示省略号
pd.set_option(‘expand_frame_repr’, False)True可以换行显示,False不允许换行
pd.set_option(‘colheader_justify’, ‘left’)显示居中还是左边
pd.set_option(‘display.width’, 200)横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200.

2.1 创建pandas

函数描述
创建pd.Series(data=array_like,index=list)创建一维数组
pd.Series(data=dict)创建一维数组(不需要指定index)
pd.DataFrame(array_like,index=list,columns=list)创建二维数组
pd.DataFrame(data=dict,index=list)创建二维数组(不需要指定columns)

2.2 Series、DateFrame数据索引与查看

函数描述
display(panda语句)前端显示
查看.head(n)头部10个,默认5个
.tail(n)尾部10个,默认5个
.shape形状
.dtype数据类型
.dtypes数据类型
.index行索引
.columns列索引
.values只显示对象值,不显示行和列索引
.describe数值型列的汇总统计:计数、平均值、最小值、最大值、四分位数
.info列索引、数据类型、非空计数和内存信息

.dtypes查看数据类型时,返回不同的字母代表不同的数据类型

返回数据类型
‘b’boolean
‘i’(signed) integer
‘u’unsigned integer
‘f’floating-point
‘c’complex-floating point
‘O’(Python) objects
‘S’, ‘a’(byte-)string
‘U’Unicode
‘V’raw data (void)

2.3 文件IO

函数描述
csv文件IO.to_csv(“df.csv”,sep=“,”,header=True,index=True)输出为csv文件,sep分隔符,header列索引,index行索引(单独作为一列)
.read_csv(“df.csv”,sep=“,”,header=[0],index_col=0)读取csv文件数据,第一行第一列
.read_table(“df.csv”,sep=“,”,header=[0],index_col=0)读取csv文件数据,第一行第一列
Excel文件.to_excel(“df.xls”,sheet_name=“sheet1”,header=True,index=True)输出为excel文件
.read_excel(“df.xls”,sheet_name=0,header=0,name=list(‘ABCDE’),index_col=0)读取excel文件,第一个sheet表,name可替换行索引
with pd.ExcelWriter(‘data.xls’) as wtiter:
df1.to_excel(writer,sheet_name=‘sheet1’,index=False)
df2.to_excel(writer,sheet_name=‘sheet2’,index=False)
保存多个sheet表到excel
HDF5.to_hdf(‘./data.h5’,key=‘salary’)保存HDF5文件
pd.read_hdf(‘./data.h5’,key = ‘salary’)读取HDF5文件
SQLfrom sqlalchemy import create_engineSQLAlchemy提供SQL工具包及对象关系映射工具
import pymysql
conn=create_engine(‘mysql+pymysql://root:password@localhost/pandas?charset=UTF8MB4’)数据库连接
df.to_sql(‘df’,conn,if_exists=‘append’)保存到数据库,if_exists设置追加数据
pd.read_sql(‘select*fromdflimit10’,conn,index_col=“Python”)数据库中查询数据,index_col指定行索引名

2.4 获取数据

函数描述
多层索引pd.MultiIndex.fromProduct()创建多层索引
pd.DataFrame(data=array_like,
index=pd.MultiIndex_fromProduct(),
columns=pd.MultiIndex_fromProduct())
创建多层索引示例
索引df[‘column1’]或df.column1单列数据
df[[‘column1’,‘column2’]]多列数据
df[2:5]行切片
显性索引df.loc[“index1”]使用标签选择数据
df.loc[(df.col1==0)&(df.col2==2)]条件选择数据
隐形索引df.iloc[]使用位置选择数据
df.iloc[:,7:9]列切片
索引重置df.reset_index(drop=True, inplace=True)索引重置,当索引不是默认索引时,会将原索引变为新字段
df.set_index([col1])重新将某列设置为索引
其他df.select_dtypes()根据数据类型选择列,如输入[‘float64’]则选择浮点数列

2.5 数据操作

函数描述
数据拼接pd.concat([df1,df2])或pd.concat([df1,df2],axis=0)或df1.append(df2)行(横向)拼接
pd.concat([df1,df2],axis=1)列(竖向)拼接
插入df.insert(loc=0,column=“column1”,value=list(“ABCDEFG”))插入一列
连接pd.merge(df1,df2,
how=“inner”,
on=“column1”)
内连接
pd.merge(df1,df2,
how=“outer”,
right_on=“column1”,
left_on=“column2”)
外连接
pd.merge(df1,df2,
how=“left/right”,
right_on=“column1”,
left_on=“column2”)
左/右连接
pd.merge(right=df1,left=df2,
right_index=True,
left_index=True)
列索引合并
df1.join(df2)按照索引进行数据合并
数据清洗df.duplicated()判断是否有重复值
df.drop_duplicates()删除重复值,插入inplace=True可改变原数组,插入字段名称(可多个)可单独根据字段进行去重
df.isnull/isna()判断是否有空值
df.any()只要一个序列中满足一个True,则返回True
df.all()一个序列中所有值为True时,返回True,否则为False
df.dropna(how=‘any’,axis=0)删除空值,插入inplace=True可改变原数组,any任一为空,all所有为空,axis默认0(行)
df.fillna(value=1,inplace=“True”)多维数组填补空值
df.fillna({“col1_name”:value},inplace=“True”)一维数组填补空值
del df[‘columna’]删除列
df.drop(labels=‘column1’,axis=1)删除列
df.drop(labels=[1,3],aixs=0)删除行(2和3行)
df.filter()根据标签条件过滤行或列数据
数据转换df.rename(index={‘A’:‘AA’},columns={‘dog’:‘cat’},inplace=True)重命名轴索引,inplace定义是否改变原数组
df.replace()替换值
df[‘col1’].astype()数据格式转换
pd.to_numeric()将数据类型转化为浮点数
df[‘colname’] = df[‘colname’].apply(pd.to_numeric, errors=‘coerce’)object类型数据转化为float
df[‘col1’].tolist()pandas数据转化为list,常用在pyecharts绘图中
df[‘col1’].toframe()Series数据转化为DataFrame
映射df[‘column1’].map()映射,只能针对一列进行修改,括号内可以传字典,也可以传(匿名)函数
df.apply(func,axis=0)映射,Series与Dateframe均可使用,只能传函数,axis改变映射方向
df.applymap()DataFrame专有
df.transform()映射,可⼀列执⾏多项计算,也可多列执⾏不同计算
重排df.take(indices,axis=1/0)根据传入的索引,对列或行进行重排,常用于随机抽样
pf.get_dummies()哑变量,str类型的数据,经过哑变量变换可以使用数字表示
pd.factorize()把字符型变量分解为数字,适用于字符多的情况下
df.T转置
df.stack()行转为列
df.unstack(level = -1)列转为行,level指定哪⼀层,进⾏变换
df2.stack().unstack(level = 1)行列互换

2.6 其他

函数作用备注
pd.crosstab(col1,col2)列联表,交叉列表取值以col1为索引聚合col2的值

2.7 统计

函数描述
统计df.count()非N值的总数
df.max(axis=0)最大值
df.min()最小值
df.mean()平均值
df.median()中位数
df.mode()众数
df.sum()累计和
df.quantile(q)分位数,q代表分位,默认为0.5,及中位数
df.describe()统计汇总
df.value_counts()统计出现次数,使用normalize=True可以将计数转化为占比
Series.unique()去重
Series.nunique()返回去重后数值个数,常用于groupby分组后去重统计
df.cumsum()累计求和
df.cumprod()累计求积
df.std()标准差
df.var()方差
df.cummin()累计最小值
df.cummax()累计最大值
df.diff()计算差分
df.pct_change()百分比变化
df.cov()协方差
df.corr()所有属性的相关性系数
df.corrwith(df[‘column1’])单一属性的相关性系数
统计索引df.idxmax()最大值索引标签
df.idxmin()最小值索引标签
df[‘column1’].argmax()(Series)最大值位置索引
df[‘column1’].argmin()(Series)最小值位置索引
排序df.sort_index(axis=0,ascending=True)按行降序排序
df.sort_index(axis=1,ascending=False)按列升序排序
df.nlargest(n,columns=‘column1’)返回某列中最大的n个值
df.nlsmallest(n,columns=‘column1’)返回某列中最小的n个值
df.sort_values(by=[‘column1’,‘column2’],ascending=False)按值升序排序,先按column1,后按column2;Series排序时,不需要by语句
分箱pd.cut(df[‘column1’],bins=n,labels)等宽分箱,labels对每个箱进行命名
pd.cut(df[‘column1’],bins=[n0,n1,n2],labels)制定宽度分箱
pd.qcut(df[‘column1’],q=n,labels)等频分箱
分组聚合group=df.groupby(by=‘column1’)[column2]分组
df.groupby().agg()多种统计汇总
df.pivot_table(values,index,aggfunc)透视表,values是要透视分组的值,index是分组透视的指标,aggfunc聚合运算的统计方法

2.8 时间序列

函数说明
时间序列pd.to_datetime(,format=‘%Y-%m-%d %H-%M-%S’)批量转换时期数据
pd.Timestamp()具体时间点,返回Timestamp格式数据
pd.Period()时刻数据
pd.date_range()时期数据
pd.period_range()批量时刻数据
pd.Dateoffset()时间偏移
Timestamp属性ts.year
ts.dayofweek星期几
ts.weekofyear一年中第几个星期
ts.shift()数据移动
ts.tshift()月移动
ts.asfreq()频率转换
ts.resample()重采样

2.9 属性接口(accessors)

pandas提供了cat、dt、str三种属性接口(accessors),分别对应分类数据、日期时间数据和字符串数据,通过这几个接口可以快速查看数据特定的属性

前提是该接口针对的是一维数组,因此对于Dataframe,需要先提取字段进行以下操作,即Series或Dataframe[“col”]

2.9.1 str

函数说明
Series.str将序列中元素字符串化,以对元素进行字符串操作
Series.str.lower()字符串转小写
Series.str.startswith()判断元素中是否以某段字符起始
Series.str.contains()判断元素中是否有某段字符
Series.str.extract()可用正则从字符数据中抽取匹配的数据,只返回第一个匹配的数据

2.9.2 dt

函数说明
Series.dt将序列中元素时间戳化,以对元素进行时间戳提取
Series.dt.date返回一个日期的 日期部分,即只包含年月日,返回的Series是object类型的
Series.dt.normalize()返回一个日期的 日期部分,返回的Series是datetime64类型的
Series.dt.year返回年份部分
Series.dt.month返回月份部分
Series.dt.day返回日期部分
Series.dt.dayofweek返回星期几
Series.dt.hour返回小时部分

3. Pandas常用操作

3.1 时间序列截取

cond1 = sales.Date>="2010-12-01"
cond2 = "2011-07-01">sales.Date
sales[cond1&cond2]
#或者
sales[(sales.Date>="2010-12-01") & ("2011-07-01">sales.Date)]

3.2 数据类型格式转换

astype()强制转换

df['col1'] = df['col1'].astype(str)

apply映射转换

df['col1'] = df['col1'].apply(str)

3.3 条件选择isin与~ + isin

使用isin选择数据

df = df[df.col1.isin(col1_cond)]

使用~+isin反选数据,即选择col1_cond以外的数据

df = df[~df.col1.isin(col1_cond)]

3.4 Series转化为DataFrame

  1. 索引不用转时,使用toframe()方法
  2. 需要把索引也转为数组时
dict_ = {'col1':Series.index,'col2':Series.values}
df = pd.DataFrame(dict_ )

3.5 groupby分组后的运算

  1. 对于字段之间的运算,先对字段运算创建新字段,然后再进行分组
#月销售额
sales_1["month_sale"] = sales_1.quantity * sales_1.unitPrice  
month_sale_sum = sales_1.groupby(by=["months"]).month_sale.sum()
month_sale_sum
  1. 对于字段分组后统计个数的去重,可以直接使用nunique函数
#销售订单总数
order_count = sales_pay.groupby(by=["months"]).invoiceNo.nunique()
order_count
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值