Python DataFrame数据重排(重塑),将数据的列旋转为行

场景和模拟数据:

excel里有一份产品详情表,包含SKU编码、SKU名称、颜色和尺码,属性是按列排放的,但是部分SKU的属性是空的。这次的任务是把这份excel数据读到Python里面,并且要把属性转成按行排列,excel里面的原始数据形式和最终要转化成的dataframe形式如图所示。

处理过程:

每一步的处理可以参考注释理解。

import pandas as pd
# 读取excel文件,index_col=0,实现把第1列SKU设置为索引,后面就不用再写代码行:df = df.set_index(['SKU'])
df = pd.read_excel('D:/pyCharm2019.1/PythonProject/EverydayStudy/test.xlsx', sheet_name='Sheet1', index_col=0)
# stack将数据的列旋转为行(自动剔除null),延申一下:unstack将数据的行旋转为列
df = df.stack()
# stack列转行后出现层次化索引
print('stack列转行后数据形式:', '\n', df.head())
# reset_index还原索引,把层次化索引变为默认的整型索引,层次化索引被还原成普通列
df = df.reset_index()
# 设置数据列名
df.columns = ['SKU', 'ATTRIBUTE', 'ATTRIBUTE_VALUE']
print('\n最终dataframe形式:', '\n',  df)

结果显示如下:

stack列转行后数据形式: 
 SKU       
A    NAME       aa
     COLOR     red
     SIZE        L
B    NAME       bb
     COLOR    blue
dtype: object

最终dataframe形式: 
    SKU ATTRIBUTE ATTRIBUTE_VALUE
0    A      NAME              aa
1    A     COLOR             red
2    A      SIZE               L
3    B      NAME              bb
4    B     COLOR            blue
5    B      SIZE               M
6    C      NAME              cc
7    C     COLOR           green
8    C      SIZE              XL
9    D      NAME              dd
10   D     COLOR           black
11   D      SIZE               S
12   E     COLOR             red
13   E      SIZE               L
14   F      NAME              ff
15   F      SIZE               M
16   G      NAME              gg
17   G     COLOR           green

如果你有更好的方法和技巧,请让我也了解学习下。

发布了34 篇原创文章 · 获赞 4 · 访问量 3374

猜你喜欢

转载自blog.csdn.net/lvhuike/article/details/99694580