将数据帧重塑为长格式python

时间:2018-02-14 20:34:41

标签: python excel pandas csv dataframe

我正在使用一个名为newdata.csv的CSV数据集,该数据集具有1997年至2015年186个国家/地区的腐败感知指数评级。以下是它的一个小快照:

Small snapshot data

在这里,岁月延伸到右边。 我想将数据放入我可以在python中使用的长格式。为此,我尝试使用pandas的融合功能。这段代码:

import pandas as pd
data = pd.read_csv("newdata.csv", encoding = "ISO-8859-1")
a = pd.melt(data, id_vars='Country', value_vars=[1997, 1998, 1999, 
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 
2012, 2013, 2014, 2015])

然后我将其导出为我可以在excel中查看的新CSV,使用以下代码:

a.to_csv('Pythonoutput.csv', sep=',')

当我这样做时,我会根据需要获得country列和year列,但不会获得任何数据。这是我的结果:

enter image description here 如何让我的CPI值显示向下以及年份?

1 个答案:

答案 0 :(得分:1)

首先,阅读您的数据

df = pd.read_csv("newdata.csv", encoding = "ISO-8859-1")

您的数据索引为Country,因此请让数据框通过set_index()了解

df = df.set_index('Country')

要将所有列堆叠在一起,请使用stack()

df = df.stack()

通过堆叠,DataFrame会自动获得一个MultiIndex级别。最后重命名索引。 DataFrame可以将Country推断为第一级的名称,但第二级还没有标签:

df.index.names = ['Country', 'Year']

现在您已准备好通过to_csv()将其导出。使用header - 参数

为系列命名
df.to_csv("Pythonoutput.csv", header=['CPI'])

全部放在一起:

df = pd.read_csv("newdata.csv", encoding = "ISO-8859-1").set_index('Country').stack()
df.index.names = ['Country', 'Year']
df.to_csv("Pythonoutput.csv", header=['CPI'])