如何删除Pandas DataFrame中列名含'PM'的列及解决相关报错
问题原因与解决方案
报错解读
- 核心逻辑错误:你需要判断的是列名是否包含
PM,但你写的df.iloc[0,j]实际取的是第0行第j列的单元格值,不是列名。 - pandas的数值类型列底层默认用numpy数组存储,你取出的这个单元格值是
numpy.float64类型,该类型没有str属性,调用.str.contains自然会抛出AttributeError,这就是报错提到numpy的原因。 - 额外的语法/逻辑问题:
- 判断语句前缺少
if关键字,语法不合法 - 循环遍历列索引的同时删除列,会导致后续列索引错位,出现删错列的问题
- 判断语句前缺少
正确实现方式
方案1:直接筛选保留不含PM的列(最简洁)
df = df.loc[:, ~df.columns.str.contains('PM')]
解释:df.columns.str.contains('PM')会对所有列名做匹配,返回布尔数组,列名含PM的位置为True;~是取反运算符,最终筛选出所有列名不含PM的列。
方案2:先提取待删除列再调用drop
# 提取所有列名含PM的列 pm_cols = df.columns[df.columns.str.contains('PM')].tolist() # 直接删除对应列 df.drop(columns=pm_cols, inplace=True)
内容的提问来源于stack exchange,提问作者vish
相关产品推荐
相关产品推荐

