一开始我也不理解什么是宽表,搜了一下资料,原来横向看很长的表被叫做:宽表
一般宽表有时间轴,如从2013-2016年间的数据。如下:
长表则是这样的:
它的字段并不会很多,但是行数很多。
字段:excel中列的意思
如何将这两种类型表转化呢?
宽表转长表
第一步:将表放到pandas
import pandas as pd
#宽表转长表
data=pd.read_excel('C:/Users/yellow/Desktop/data.xlsx',header=0)
print(data)
正常打印
第二步:确定索引列,就是你需要保存的字段
data1=data.melt(id_vars=["公司","名字"],var_name="Year",value_name="sale")
这段代码的意思是,将"公司","名字"这2个字段固定起来,然后将【2013、2014、2015、2016】转成Year列,将【5000、3500】值转成sale列,注意这里要用“双引号”,书是这样说的,赋值给data1,否则数据不会改变。
print(data1)
看见这种情况,就知道我们已经转成长表了。
现在我们开始从长表转成宽表:
长表转宽表
以下是长表的样子:
其实这个结果是data1的结果了,我把它转出excel了,那看看我们怎么转成宽表
第一步:打印在pandas
data2=pd.read_excel('C:/Users/yellow/Desktop/data1.xlsx',header=0)
打印成功的话,准备转了
第二步:开始转宽表
data3=data2.pivot_table(index=["公司","名字"],columns="Year",values="sale")
要用到pivot_table,我也不知道这个是啥东西,要打。index=["公司","名字"],你需要固定的列,columns="Year"将Year字段作为列,values="sale"将sale字段作为值。注意这里要用“双引号”,书是这样说的,赋值给data1,否则数据不会改变。
查看结果图:
以下是完整代码:
import pandas as pd
#宽表转长表
data=pd.read_excel('C:/Users/yellow/Desktop/data.xlsx',header=0)
print(data)
data1=data.melt(id_vars=["公司","名字"],var_name="Year",value_name="sale")
data1.to_excel('C:/Users/yellow/Desktop/data1.xlsx',index=True)
print(data1)
#长表转宽表
data2=pd.read_excel('C:/Users/yellow/Desktop/data1.xlsx',header=0)
data3=data2.pivot_table(index=["公司","名字"],columns="Year",values="sale")
data3.to_excel('C:/Users/yellow/Desktop/data2.xlsx',index=False)
print(data3)
总结:
这个转化,特别简单,解决了我用透视表整理数据的烦恼。希望能对你们有帮助~