我给出了以下形式的元组列表:
ls = [(14, 6, 1.5), (14, 7, 1.5), (14, 8, 1.5), (14, 9, 1.5), (14, 10, 1.5), (14, 11, 1.5), (14, 12, 1.5), ..., (14, 13, 1.5), (14, 14, 1.5), (14, 15, 1.5)]
有一个pandas DataFrame,其中一列data['ind']
是与上面列表的索引相对应的整数。
现在我想创建一个新列,其中包含对应于同一行的索引列条目的元组。我是这样做的:
data['ls'] = data['ind'].apply(lambda x: ls[x])
但是我收到了以下错误:
ValueError: setting an array element with a sequence.
有没有解决此错误的方法?如果列表包含浮点数或整数而不是元组,则代码可以正常工作......
答案 0 :(得分:2)
我首先从你的元组列表中创建一个Series
:
LS = pd.Series(ls)
然后拨打map
:
data['ls'] = data['ind'].map(LS)
使用列表中的示例:
ls = [(14, 6, 1.5), (14, 7, 1.5), (14, 8, 1.5), (14, 9, 1.5), (14, 10, 1.5), (14, 11, 1.5), (14, 12, 1.5)]
和此:
data = pd.DataFrame({'ind':[0,2,3]})
执行查找会导致:
In [10]: LS = pd.Series(ls)
In [11]: LS
Out[11]:
0 (14, 6, 1.5)
1 (14, 7, 1.5)
2 (14, 8, 1.5)
3 (14, 9, 1.5)
4 (14, 10, 1.5)
5 (14, 11, 1.5)
6 (14, 12, 1.5)
dtype: object
In [12]: data['ls'] = data['ind'].map(LS)
In [13]: data
Out[13]:
ind ls
0 0 (14, 6, 1.5)
1 2 (14, 8, 1.5)
2 3 (14, 9, 1.5)
答案 1 :(得分:1)
您可以从ls
创建数据框并将其合并到您的数据中。
data.merge(pd.DataFrame(ls, columns['ls']), left_on='ind', right_index=True)