Pandas链式索引修改指定列值失效及loc索引报错如何解决?
失效原因说明
- 链式索引
df[df['topic']=='job'][df.content.str.contains("bb")==True]["topic"]返回的是原DataFrame的副本,对副本赋值不会修改原始数据,还会触发SettingWithCopyWarning警告。 - 使用
loc时报ValueError: Cannot index with multidimensional key错误,是因为你构造的mask是二维结构,loc的行筛选参数仅支持一维布尔序列。
正确实现代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'topic': ['job', 'job', 'job', 'edu', 'edu', 'edu'], 'content': ['a b cc', 'a bb c', 'aa bb c', 'ee dd uu', 'bb e d u', 'e dd uu'] }) # 构造一维复合筛选条件 filter_condition = (df['topic'] == 'job') & (df['content'].str.contains('bb')) # 用loc直接对原数据赋值 df.loc[filter_condition, 'topic'] = 'civ'
运行后输出的df和你给出的预期结果完全一致。
注意事项
多个筛选条件组合时,每个独立条件需要用括号包裹,否则会因运算符优先级问题导致语法错误。
内容的提问来源于stack exchange,提问作者Salih
相关产品推荐
相关产品推荐

