从Pandas dataframe列中提取元素并创建新列

时间:2015-09-23 17:04:57

标签: python pandas

我有以下数据:

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函数,以便它可以除了错误,但是这返回了所有的空值。

似乎这应该是直截了当的,但即使在睡觉之后我也无法弄明白。

1 个答案:

答案 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()