2014-07-03 83 views
0

我有许多看起来像这样的文件。将年份和月份表转换为熊猫系列

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

我不知道你的问题是否包含在解析文件或没有,所以这里有云:

首先,我们解析(CSV)文件,并确保其指定为whitespace-分隔:

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

delim_whitespace比九月=””更好,因为它解释任何数目的连续空格作为一个单一的分隔符的。

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

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

现在,我们做一些清理:合并“月”和“年”列在一起,丢弃“年份”列,解析字符串作为datetime和按日期排序。

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") 

最后,我们可以在我们的数据帧转换成一个系列:

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 

希望这有助于!

+0

谢谢。融化是我一直在寻找的。 –

0

目前,我的解决方案是这样的,但它感觉漂亮adhoc。

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 
相关问题