将列添加到数据框,其中所有其他列都是句点

时间:2014-12-01 16:51:57

标签: python pandas indexing time-series

我有一个带有PeriodIndex的时间序列数据帧。我想将值用作另一个数据帧中的列名,并添加其他列,而不是句点。问题是,当我通过仅使用句点作为列索引来创建数据帧时添加一个列,其中索引是一个字符串会引发错误。但是,如果我使用包含句点和字符串的列索引创建数据框,那么我可以添加带字符串索引的列。

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

这不会引发错误并提供我想要的结果,但这样做我在创建数据帧时无法以方便的方式分配数据。我想要一种更优雅的方式来实现结果。我想知道这是否是熊猫中的一个错误?

1 个答案:

答案 0 :(得分: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')

使用.merge最有可能获得相同的结果。