Pandas列内容为索引

时间:2017-03-30 18:41:41

标签: python pandas

我正在尝试使用现有的pandas列设置一个新的pandas列作为索引来分隔列表,但我不断收到以下错误:

TypeError: list indices must be integers or slices, not Series

见下面的代码:

import pandas as pd

monthvalues=[1,4,9,16,25,36,49,64,81,100,121,144]

df=pd.DataFrame([1,4,7,9], columns=['month'])

df['value']=monthvalues[df['month']-1]

预期结果

    "month" "value"
0   1       1
1   4       16
2   7       49
3   9       81

请注意,这仅仅是一个例子,我实际上并没有试图将月份数字对齐。

2 个答案:

答案 0 :(得分:0)

这是因为df['month']会返回一个Pandas系列,而不是我怀疑你期望的列表(尽管如果它是一个列表它仍然无效)。

我不确定是否有更简洁的方式,但试试这个:

df['value'] = [monthvalues[x] for x in df['month']-1]

答案 1 :(得分:0)

如果您从列表中构造Series,则可以使用iloc将其作为查找传递,并且重要的是将Series转换为numpy数组,以使其正确对齐:

In [41]:
monthvalues=[1,4,9,16,25,36,49,64,81,100,121,144]
df=pd.DataFrame([1,4,7,9], columns=['month'])
df['value']=pd.Series(monthvalues).iloc[df['month']-1].values
df

Out[41]:
   month  value
0      1      1
1      4     16
2      7     49
3      9     81