将年份和月份表转换为熊猫系列

时间:2014-07-03 14:54:58

标签: python pandas

我有很多看起来像这样的文件。

Year    Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1997    1.840%  -0.680% 0.480%  1.550%  1.510%  1.750%  2.630%  -0.190% 2.960%  2.180%  0.610%  0.710%
1998    -0.470% 1.270%  2.130%  1.200%  0.880%  1.790%  -0.800% -1.000% 1.080%  0.480%  0.710%  2.930%

有没有办法将这样的文件干净地转换成熊猫系列?

2 个答案:

答案 0 :(得分:2)

我不确定您的问题是否包含解析文件,所以请点击此处:

首先,我们解析(csv)文件,确保指定它是以空格分隔的:

df = pd.read_csv('data.csv', delim_whitespace=True)

delim_whitespace比sep ="更好",因为它将任意数量的连续空格解释为单个分隔符。

然后,我们melt数据框将行和列合并在一起(即' Jan'列和' 1997'行成为单个' 1997年1月& #39;使用正确的百分比值排行。)

 df = pd.melt(df, id_vars=["Year"], var_name="Month", value_name = "Percentage")

现在,我们进行了一些清理工作:合并“月份”'和'年'列在一起,放弃了'年'列,将字符串解析为日期时间并按日期排序。

df['Month'] = df.Month + " " + df.Year.map(str)
df = df.drop('Year', axis=1)
df["Month"] = pd.to_datetime(df.Month, format="%b %Y", dayfirst=True)
df = df.sort("Month")
df = df.set_index("Month")

最后,我们可以将DataFrame转换为系列:

series = df.ix[:,0]

最终结果为我们提供了以下系列:

Month
1997-01-01     1.840%
1997-02-01    -0.680%
1997-03-01     0.480%
...
1998-10-01     0.480%
1998-11-01     0.710%
1998-12-01     2.930%
Name: Percentage, dtype: object

希望这有帮助!

答案 1 :(得分:0)

目前,我的解决方案就是这个,但感觉非常特别。

df = pd.read_excel("file.xls")
df = df.set_index("year")
frame = df.stack()
new_index = []
for item in frame.index:
    ts = pd.Timestamp(item[1] +"-1-"+ str(int(item[0])))
    new_index.append(ts)
frame.index = new_index