python - 应用函数仅适用于一列而不是多列?

标签 python python-3.x apply data-manipulation

x = [{'list1':'[1,6]', 'list2':'[1,1]'},
     {'list1':'[1,7]', 'list2':'[1,2]'}]

df = pd.DataFrame(x)

现在我要将其从字符串类型转换为列表类型:

df[['list1','list2']].apply(lambda x: ast.literal_eval(x.strip()))

>> ("'Series' object has no attribute 'strip'", 'occurred at index list1')

所以我收到错误,但如果我只选出 1 列:

d['list1'].apply(lambda x: ast.literal_eval(x.strip()))

>>    0    [1, 6]
      1    [1, 7]
      Name: list1, dtype: object

为什么会发生这种情况?为什么它只允许一列而不是多列?

最佳答案

了解如何 apply 非常重要应该有效,以便了解为什么它不适合您。每列(考虑默认的 axis=0)都会被迭代操作,您可以通过让每个系列自行打印来了解如何操作:

df.apply(lambda x: print(x))
0    [1,6]
1    [1,7]
Name: list1, dtype: object
0    [1,1]
1    [1,2]
Name: list2, dtype: object

当您尝试调用 (series_object).strip() 时,该错误更有意义。

<小时/>

由于您想将函数单独应用于每个单元格,因此可以使用 applymap 代替,相比之下它相对更快。

df[['list1','list2']].applymap(ast.literal_eval)

或者,

df[['list1','list2']].applymap(pd.eval)

    list1   list2
0  [1, 6]  [1, 1]
1  [1, 7]  [1, 2]

其他选项还包括:

df.apply(lambda x: x.map(ast.literal_eval))

    list1   list2
0  [1, 6]  [1, 1]
1  [1, 7]  [1, 2]

除其他外。

关于python - 应用函数仅适用于一列而不是多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53472302/

相关文章:

javascript - 将绑定(bind)应用与数组参数一起使用时参数丢失

python - 按年份分组并将函数应用于另一列 - Python、Pandas

python - 在 scipy.signal 中使用 nan 值去趋势化数据

python - 尝试在 djangoFramework 项目上运行 python manage.py migrate 但收到错误

python - pandas 时间间隔到时间序列

python-3.x - xarray 中的乘法

python - 如何使用 asyncio 创建 TCP 代理服务器?

python - 如何使用 pygame 删除 python 中显示的对象?

python - 模型中的 Django default=datetime.now() 在 uwsgi 重置后总是保存相同的日期时间

r - apply() 没有按预期工作