在Pandas中遍历列表填充列遇TypeError,求正确实现方案
在Pandas中遍历列表填充列的问题解决
咱们先拆解下你遇到的问题和代码里的问题:
错误原因分析
你用df["A"].apply(fill_row)的时候,apply会把A列的每个列表元素(比如[5,6,7])单独传给fill_row函数,但你的fill_row函数却把这个参数当成了整个DataFrame来操作,试图访问df["A"]——这时候参数df其实是一个普通列表,自然会报错TypeError: list indices must be integers or slices, not str。另外,你函数里写的df["B"] == 4是比较操作,不是赋值,应该用单等号=才行。
正确实现方法
你的需求看起来是:如果A列的列表里包含数字4,就给B列赋值4,否则赋值0。我们可以针对单个列表来写处理逻辑,再用apply批量处理:
方法1:自定义函数
import pandas as pd # 初始化DataFrame df = pd.DataFrame([{'A': [5, 6, 7], 'B': ""}, {'A': [3, 4, 7], 'B': ""}, {'A': [3, 0, 4], 'B': ""}]) # 定义处理单个列表的函数 def get_b_value(lst): return 4 if 4 in lst else 0 # 应用到A列,填充B列 df["B"] = df["A"].apply(get_b_value)
方法2:用lambda简化
如果逻辑简单,也可以直接用lambda函数一行搞定:
df["B"] = df["A"].apply(lambda x: 4 if 4 in x else 0)
验证结果
执行后你会得到期望的DataFrame:
A B 0 [5, 6, 7] 0 1 [3, 4, 7] 4 2 [3, 0, 4] 4
内容的提问来源于stack exchange,提问作者ladybug
相关产品推荐
相关产品推荐

