2014-12-01 53 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

相关问题