如何使用Pandas删除数据集中包含'-'值的对应行
错误原因分析
- 首先你写的
df.2009不符合Python语法规则:Python不允许标识符以数字开头,所以对于数字开头的列名,不能用点属性的方式访问,必须改用df['2009']这种方括号加字符串列名的写法。 - 其次你当前的写法只判断了2009列是否有'-',如果你的需求是删除任意列存在'-'的行,只判断单列是不够的。
正确实现代码
场景1:仅需删除2009列值为'-'的行
import pandas as pd df = pd.read_csv('modified_data.csv') df = df.dropna() # 移除包含NA的行 df = df[df['2009'] != '-'] # 改用方括号访问数字开头的列 print(df)
场景2:需要删除所有列中存在任意一个'-'的行(更符合你的数据情况)
import pandas as pd df = pd.read_csv('modified_data.csv') df = df.dropna() # 逐行检查是否有'-',仅保留完全没有'-'的行 df = df[~df.isin(['-']).any(axis=1)] print(df)
代码说明
df.isin(['-'])会把数据中所有等于'-'的位置标记为布尔值True,.any(axis=1)会逐行判断是否存在至少一个True(即该行有'-'),最前面的~是取反操作,最终筛选出完全没有'-'的行。
优化小技巧:你也可以在读入CSV的时候就把'-'直接识别为空值,后续只需要一次
dropna()就能同时删除原NA和'-'对应的行,写法更简洁:df = pd.read_csv('modified_data.csv', na_values=['-']) df = df.dropna()
内容的提问来源于stack exchange,提问作者Mathhurtsmybrain
相关产品推荐
相关产品推荐

