2014-12-01 51 views
0

我有一個帶有PeriodIndex的時間序列數據框。我想將這些值作爲另一個數據框中的列名稱,並添加其他列,而不是期間。問題是,當我通過僅使用句點作爲列索引來創建數據框時,添加列whos索引是一個字符串會引發錯誤。但是,如果我創建一個帶有句點和字符串的列索引的數據框,那麼我可以添加一個包含字符串索引的列。將列添加到所有其他列都是句點的數據框

import pandas as pd 
data = np.random.normal(size=(5,2)) 
idx = pd.Index(pd.period_range(2011,2012,freq='A'),name=year) 
df = pd.DataFrame(data,columns=idx) 
df['age'] = 0 

這產生了一個錯誤。

import pandas as pd 
data = np.random.normal(size=(5,2)) 
idx = pd.Index(pd.period_range(2011,2012,freq='A'),name=year) 
df = pd.DataFrame(columns=idx.tolist()+['age']) 
df = df.iloc[:,:-1] 
df[:] = data 
df['age'] = 0 

這不會引發錯誤,並給出我想要的結果,但做這種方式,當我創建數據框,我不能指定一個便捷的方式中的數據。我想要一個更優雅的方式來實現結果。我不知道這是否是Pandas中的一個錯誤?

+0

以下是否做了你想要的:'df = pd.DataFrame(columns = pd.Series(idx).astype(str))' – EdChum 2014-12-01 16:56:43

+0

不幸的是沒有。結果列是一些整數,但與PeriodIndex中的年份不同。這與使用'idx.​​values'相同的問題。 – 2014-12-01 17:25:59

回答

0

不能確定你想什麼來實現的,但這裏是讓我的理解,你想一個辦法:

import pandas as pd 
idx = pd.Index(pd.period_range(2011,2015,freq='A'),name='year') 
df = pd.DataFrame(index=idx) 
df1 = pd.DataFrame({'age':['age']}) 
df1 = df1.set_index('age') 
df = df.append(df1,ignore_index=False).T 
print df 

其中給出:

Empty DataFrame 
Columns: [2011, 2012, 2013, 2014, 2015, age] 
Index: [] 

,是它讓你年期間:

df.columns[0] 
Period('2011', 'A-DEC') 

使用最有可能達到相同的結果。

+0

爲了清晰起見,我嘗試編輯我的問題。 – 2014-12-01 22:09:14

相關問題