我有以下数据:
df =
id1, id2, string
1, [2], 'foo'
2, [3], 'bar'
3, [4], 'baz'
我想用数组中的值替换id2。
这是我尝试过的:
x = df['id2'].map(lambda x : x[0])
希望x是一个具有我想要的值的系列,我可以将列绑定到我的DF。实际发生的是它因IndexError而出错。在那种情况下,我创建了一个函数来代替lambda函数,以便它可以除了错误,但是这返回了所有的空值。
似乎这应该是直截了当的,但即使在睡觉之后我也无法弄明白。
答案 0 :(得分:1)
这适用于if' id2'存储为数组。您可能只需要调用tolist()来获得所需的输出。
x = df['id2'].map(lambda x: x[0]).tolist()
或者,如果' id2'存储为字符串,您可以使用ast包调用literal_eval作为数组使用:
import pandas as pd
from io import StringIO
data = StringIO(u'''id1,id2,string
1,[2],foo
2,[3],bar
3,[4],baz''')
df = pd.read_csv(data)
import ast
x = df['id2'].map(lambda x: ast.literal_eval(x)[0]).tolist()