2014-07-03 87 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 
相關問題