如何删除Pandas DataFrame列表类型列中的所有指定值
报错原因
你触发AttributeError: 'Series' object has no attribute 'remove'的核心原因是:remove()是Python原生列表的实例方法,pandas的Series(也就是你取的df['organizations'])对象本身没有这个方法,不能直接对整列对象调用,必须逐行处理每个单元格内存储的列表。
另外补充:就算是对单个列表用remove(),它也只会删除第一个匹配到的'United States',如果某个单元格的列表里存在多个'United States'项,单次调用无法删干净。
大型数据集最优实现方式
优先用列表推导式处理,比apply方法性能高30%以上,适合十万、百万级的大表:
# 注意确认列名大小写,你之前代码写的organizations首字母小写,和示例列名Organizations不匹配,后续可能触发KeyError df['Organizations'] = [ [item for item in org_cell if item != 'United States'] for org_cell in df['Organizations'] ]
代码逻辑很直接:遍历Organizations列的每一个单元格(每个单元格是一个列表),再遍历列表内的元素,只保留不等于'United States'的项,重新组装成列表后赋值回原列,不管单个列表里有多少个'United States'都能全部清除。
其他可选写法
如果你的表数据量不大,也可以用apply写法,逻辑和上面完全一致,只是性能稍差:
df['Organizations'] = df['Organizations'].apply( lambda cell: [i for i in cell if i != 'United States'] )
处理完成后打印df即可得到预期结果:
- ID为1的行,Organizations列值为
['education', 'health', 'facebook'] - ID为2的行,Organizations列值为
['health', 'Airlines', 'WHO']
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

