我正在尝试使用现有的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
请注意,这仅仅是一个例子,我实际上并没有试图将月份数字对齐。
答案 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