【问题标题】:reshape dataframe into long format python将数据框重塑为长格式python
【发布时间】:2018-07-25 12:44:47
【问题描述】:

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

在这里,岁月向右延伸。 我想将数据转换成可以在 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])

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

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

当我这样做时,我得到了我想要的国家列和年份列,但没有任何数据。这是我的结果:

如何让我的 CPI 值和年份一样向下显示?

【问题讨论】:

  • 请在阅读 csv 后运行 print(a.head()) 或更好地发布几行 newdata.csv 您从文本编辑器复制并在此处发布的位置。这将帮助我们重现您的问题。

标签: python excel pandas csv dataframe


【解决方案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 2 层。最后重命名索引。 DataFrame 可以将Country 推断为第一级的名称,但第二级还没有标签:

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

现在您可以通过to_csv() 将其导出。使用header-argument 为系列命名

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'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2017-07-19
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多