场景和模拟数据:
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
如果你有更好的方法和技巧,请让我也了解学习下。