类型 | 数据 |
---|---|
字符串类型 | 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. |
函数 | 描述 | |
---|---|---|
创建 | 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) |
函数 | 描述 | |
---|---|---|
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) |
函数 | 描述 | |
---|---|---|
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指定行索引名 |
函数 | 描述 | |
---|---|---|
多层索引 | 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’]则选择浮点数列 |
函数 | 描述 | |
---|---|---|
数据拼接 | 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) | 行列互换 |
函数 | 作用 | 备注 |
---|---|---|
pd.crosstab(col1,col2) | 列联表,交叉列表取值 | 以col1为索引聚合col2的值 |
函数 | 描述 | |
---|---|---|
统计 | 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聚合运算的统计方法 |
函数 | 说明 | |
---|---|---|
时间序列 | 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() | 重采样 |
pandas提供了cat、dt、str三种属性接口(accessors),分别对应分类数据、日期时间数据和字符串数据,通过这几个接口可以快速查看数据特定的属性
前提是该接口针对的是一维数组,因此对于Dataframe,需要先提取字段进行以下操作,即Series或Dataframe[“col”]
函数 | 说明 |
---|---|
Series.str | 将序列中元素字符串化,以对元素进行字符串操作 |
Series.str.lower() | 字符串转小写 |
Series.str.startswith() | 判断元素中是否以某段字符起始 |
Series.str.contains() | 判断元素中是否有某段字符 |
Series.str.extract() | 可用正则从字符数据中抽取匹配的数据,只返回第一个匹配的数据 |
函数 | 说明 |
---|---|
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 | 返回小时部分 |
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)]
df['col1'] = df['col1'].astype(str)
df['col1'] = df['col1'].apply(str)
使用isin选择数据
df = df[df.col1.isin(col1_cond)]
使用~+isin反选数据,即选择col1_cond以外的数据
df = df[~df.col1.isin(col1_cond)]
toframe()
方法dict_ = {'col1':Series.index,'col2':Series.values}
df = pd.DataFrame(dict_ )
#月销售额
sales_1["month_sale"] = sales_1.quantity * sales_1.unitPrice
month_sale_sum = sales_1.groupby(by=["months"]).month_sale.sum()
month_sale_sum
#销售订单总数
order_count = sales_pay.groupby(by=["months"]).invoiceNo.nunique()
order_count