- 数据透视
- 整理透视:.pivot()
- 聚合透视:.pivot_table()
- 数据堆叠
- 堆叠操作df.stack()
- 解堆操作df.unstack()
- 交叉表pd.crosstab
- 数据转置df.T
- 数据融合df.melt()
- 虚拟变量df.get_dummies()
- 因子化pd.factorize()
- 爆炸列表df.explode()
数据透视
找出大量复杂无关的数据的内在关系,将数据转化为有意义、有价值的信息,从而看到它所代表的事物的规律和本质。
整理透视:.pivot()df.pivot() #返回按给定的索引、列值重新组织整理后的DF df.pivot( index='', #取分组去重的值 columns='', #取去重的值,当列和索引有多个值时会报错,需要使用pd.pivot_table()进行操作 values='') #如果指定多个,会形成多层索引聚合透视:.pivot_table()
pd.pivot_table() #比pivot多了计算,适用于有重复
pd.pivot_table(
data, #DF对象
index='',
columns='',
values='',
aggfunc=, #用于聚合的函数,默认mean
fill_value=, #空值填充
margins=True) #是否增加汇总行列
#高级聚合
aggfunc参数可以添加多个计算方法,也可以指定
[np.mean, np.sum]
{'D':np.mean, 'E':np.sum}
数据堆叠
在多层索引的数据中,通常为了方便查看、对比,会将所有数据呈现在一列中;相反,对于层级过多的数据,我们可以实施解堆操作,让它呈现多列的状态。
如果原始数据有多个数据列,堆叠(stack)的过程表示将这些数据列的所有数据表全部旋转到行上;类似地,解堆(unstack)的过程表示将在行上的索引旋转到列上
堆叠过程将数据集的列转行,解堆过程为行转列
df.stack() #不需要参数解堆操作df.unstack()
也不用参数
交叉表pd.crosstabpd.crosstab(index,columns, values=, #传入列,根据此列的数值进行计算 rownames=, #新数据和行名 colnames=, #新数据和列名 aggfunc=, margins=False, #添加行/列边距(小计) margins_name:str='All', dropna:bool=True, normalize=False) #将所有值除以值的总和进行归一化,'columns'按列归一化数据转置df.T
df.T
#轴交换
df.swapaxes(axis1,axis2,copy=True)
df.swapaxes('index','columns')
数据融合df.melt()
#df.melt()是df.pivot()的逆操作函数 df.melt(frame:pandas.core.frame.DataFrame, id_vars=, #用作标识变量的列,不输入会省去 value_vars=, #要取消透视的列 var_name='variable', value_name='value', col_level=,) #列为多层索引,则使用此级别来指定融合时的层级虚拟变量df.get_dummies()
Dummy Variable,又称虚设变量、名义变量或哑变量
用来反应质的属性的人工变量,是量化了的自变量,通常取值为0/1,常被用于one-hot特征提取
#将一列或多列的去重值作为新表的列 pd.get_dummies( data, prefix=, #新列的前缀 prefix_sep='_', #新列前缀的链接符 dummy_na=False, columns=, #指定列 sparse=False, drop_first=False, dtype= )因子化pd.factorize()
将一个存在大量重复值的一位数据解析成枚举值的过程
#返回两个值 data=['b','b','a','c','b'] codes, uniques = pd.factorize(data) ''' # 编码 codes:数字编码表,这个编码表的长度与原始数据相同 # array([0, 0, 1, 2, 0]) # 去重值 uniques:去重值,因子 # array(['b', 'a', 'c'], dtype=object) ''' #排序 sort=True #对唯一值进行排序 #缺失值,data中有None #不会出现在唯一值列表中,在编码中以-1呈现 #枚举类型,Categorical cat = pd.Categorical(['a','a','c'],categories=['a','b','c']) codes, uniques = pd.factorize(cat)爆炸列表df.explode()
#将数据中的列表list展开
df.explode() #输入列名可以指定
#非列表形式的爆炸
df.assign(var=df.var1.str.split(',')).explode('var1') #转换为列表进行爆炸



