一、Pandas
1.1 文件读取
import pandas as pd
df=pd.read_csv("文件位置")
1.2 DataFrame 和 Series
创建: s=pd.Series(data,index=index)
其中,data可以是:字典,数组,列表,整数的值,index可自定义或省略(即默认)
p=pd.DataFrame(data,columns=...,index=...)
其中,data可以是:字典,二维数组,series,dataframe
1.3 常用的操作
1.3.1 属性
df.columns 查看列名
df.index 查看索引
df.dtypes 查看数据类型
df.shape 返回列数和行数
df.size 返回行数和列数的乘积
1.3.2 方法
df.head(N) 返回前N列
df.tail(N) 返回后N列
df.rename() 更改列名,括号内为字典格式,即 旧:新
df.replace() 更改值
df.value_counts() 返回不同的值及其出现的次数
df.sort_values(by=...) 按...进行排序
df.describe() 返回数值型变量的统计数据
max/min/mean/sum 返回 最大值/最小值/平均值/和
1.3.3 数据选取/添加/删除
1.选取
df['列名'] 或 df.列名
df[['列名1','列名2‘]]
2.增加
df.新增列名=值 或 df.新增列名=值
条件筛选
df[条件]
3.删除
del df['列名]
1.4 Missing Value
检测缺失值,返回布尔值
pd.isnull(df) 或 pd.isnull(df.列名)
删除缺失值
df.dropna(axis=0或1)
填充缺失值
df.fillna(value=填充内容)
1.5 文本数据
s是一个Series
s.str.strip() 去除首尾空格
s.str.upper() 变为大写
综合运用:s[s.str.strip().str.endswith('a')]
1.6 索引选取
1.6.1 loc
loc是基于标签的,允许的输入为:
1.单个标签,如:5,'a'
2.一个列表或标签数组,如: ['a','b','c']
3.一个标签的切片,如: 'd' : 'f'
4.一个布尔数组
5.具有一个参数的可调用函数
例:
df.loc[0:5]
df.loc[1]
df.loc[0,4,6]
df.loc[条件]
1.6.2 iloc
iloc 是基于整数位置:
1.一个整数 5
2.一个整数列表[4,3,0]
3.一个区间 1:7
4.一个布尔数组
5.具有一个参数的可调用函数
loc与iloc的区别:
loc选行是通过索引列的值来选取
iloc选行是通过未至整数来选取
例:
df.loc[ :10 , ['列名1','列名2'] ]
df.iloc[ :10, [0,1]]
逗号后面为选择的列
1.6.3 数据过滤(loc的应用)
df.loc[过滤条件]
类似于SQL中的where功能
1.6.4 多重索引
1.创建索引
new_df=df.set_index(keys=['列名1','列名2'])
其中,参数append=True表示保留原索引
参数drop=True表示丢弃被设为索引的列
删除索引 new_df.reset_index
2.对索引排序
new_df.sort_index(na_position='last',inplace=True)
其中,参数na_position表示如果存在空值则放在最后
参数inplace表示是否在原数据中保存更改
3.用slice对多重索引进行操作
例:
new_df.loc[(slice(0,100),['索引列2值1','索引列2值2','索引列2值3'],slice(None)) , : ]
其中,前面分别是对三个索引列的操作,逗号后面是columns
4. IndexSlice
IndexSlice是一种更接近自然语法的用法,可以替换slice
例: idx=pd.IndexSlice
new_df.loc[idx[ : , : , : ], : idx['列名1','列名2']
其中,逗号前面是对三个索引列的操作,逗号后面是对columns的操作,注意,逗号后面加上冒号返回的是一个表格,不加冒号返回一个列表
1.7 分组计算
三个步骤:1.根据一些标准将数据分组(spliting)
2.对分组数据作用一些函数(applying)
3.将结果组合返回一个数据结构,如DataFrame (combining)
在第二个步骤中:1.aggregation:统计特征,如avg,max,min,sum
2.transformation: 转换,如填充缺失值、标准化
3.filtration:对组进行筛选
分组:grouped=df.groupby('列名')
grouped.size() 有多少组,每组有多少条数据
grouped.groups 每组的详细情况
len(grouped) 小组的个数
1.7.1 统计计算
1.单个统计量计算
grouped.mean()
grouped.sum()
grouped.std()
grouped['列名'].sum()
2.使用agg函数进行多个统计量计算
grouped.agg([np.mean,np.sum,np.std])
3.不同的列应用不同的统计量
grouped.agg({'列名1':np.mean,'列名2':np.sum,...})
1.7.2 transformation
对null填充值
z_score=lambda s : (s-s.mean())/s.std()
grouped[['列名1','列名2']].transform(z_score)
1.7.3 filteration
grouped.filter(lambda g : len(g) > 1)
1.8 表联结
1.8.1 结构完全一样的表
result = pd.concat([df1,df2,df3])
1.8.2 merge函数
1.在一个主键上join
result = pd.merge(left,right,how=left/right/outer,on='key')
2. 在多个主键上join
当两个表主键列名都为key1,key2时
result = pd.merge(left,right,how=left/right/outer,on=['key1','key2'])
当两个表主键列名分别为key1,key2和key3,key4时
result = pd.merge(left,right,how=left/right/outer,left_on=['key1','key2'],right_on=['key3','key4'])
注:主键位置要相对应
3.在索引上join时
key1,key2是left的索引列
key1,key2是right的索引列
result = pd.merge(left,right,how=left/right/outer,left_index=True,right_index=True)
4.索引列和column join
key1,key2 为left的索引列
key1,key2 为right的columns
result = pd.merge(left,right,how=left/right/outer,left_index=True,right_on=['key1','key2'])
1.9 数据透视表
1.9.1 pivot_table
参数: data 数据源 ;
values 值 ;
index 索引列(首列);
columns 行;
aggfunc 作用的函数;
pd.pivot_table(df,values=['列名'],index=['列名'],aggfunc=[np.sum,np.std,...])
tips:未完待续、、、
网友评论