mysql 层次化_数据规整化之重塑和轴转向

数据处理过程中,经常需要将二维数据转换为一维,或者将一维转换为二维报表的形式,在Excel中需要借助数据透视表进行一维转二维,在pandas中有许多重塑(reshape)或者轴向旋转(pivot)运算。

重塑层次化索引

层次索引化为DataFrame数据的重排任务提供了一种具有良好一致性的方式:stack :将数据的列旋转为行;

unstack:将数据的行旋转为列

data = DataFrame(np.arange(6).reshape((2,3)),

index =pd.Index(['Ohio','Colorado'],name='state'),

columns = pd.Index(['one','two','three'],name='unmber'))

data

result =data.stack()

result

对于一个层次化索引的Series,可以通过unstack重排为一个DataFrame,unstack操作的是最内层,传入分层级别的编号或者名称即可对其他级别进行unstack。

stack会默认将缺失值过滤,如果要保留缺失值需要传入dropna = False;

时间序列中将长格式旋转为宽格式

在MySQL关系型数据库中,数据的存储格式(ldate的前3行如下)

date item value

0 1959-03-31 00:00:00 realgdp 276.2

1 1959-03-31 00:00:00 infl 214.224

2 1959-03-31 00:00:00 unemp 4.232

如果想将以上数据转换为DataFrame,实现不同的item值分别形式一列,date中的值则用作索引,则需要使用DataFrame的pivot的方法。

对实例化数据框.pivot相当于excel中的透视表功能,指定行的索引,指定列的字段,数据填充来源。

ldate.pivot(‘date’,‘item’,‘value’)

前两个参数值分别用做行和列索引的列名,最后一个参数值则是用于填充DataFrame的数据列的列名,和Excel中不同的是pivot方法中如果忽略最后一个参数值,则当有多个标量时,就会得到一个带有层次化的列:

如上例中有两个需要参与重塑的数据列

ldate['value2'] = np.random.randn(len(ldate)) #增加一个数据列value2

当忽略最后一个参数时,默认两个数据列进行重排,那么两个数据列就会以一个层次化的列DataFrame。

小结:

在数据清理规整过程中,需要对数据进行行列转换,按轴重排则需使用到stack/unsack/pivot的方法,使得数据以想要的方式实现重排。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值