Pandas

Pandas

  • 1. 学习路线
  • 2. pandas库
    • 数据类型
    • 显示设置
    • 2.1 创建pandas
    • 2.2 Series、DateFrame数据索引与查看
    • 2.3 文件IO
    • 2.4 获取数据
    • 2.5 数据操作
    • 2.6 其他
    • 2.7 统计
    • 2.8 时间序列
    • 2.9 属性接口(accessors)
      • 2.9.1 str
      • 2.9.2 dt
  • 3. Pandas常用操作
    • 3.1 时间序列截取
    • 3.2 数据类型格式转换
      • astype()强制转换
      • apply映射转换
    • 3.3 条件选择isin与~ + isin
    • 3.4 Series转化为DataFrame
    • 3.5 groupby分组后的运算

1. 学习路线

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文件
SQL from sqlalchemy import create_engine SQLAlchemy提供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’) 删除空值,插入inplace=True可改变原数组
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.sum() 累计和
df.quantile() 分位数
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

你可能感兴趣的:(#,python)