如何使用pandas删除DataFrame无名/空列中包含'id'的行
解决方案
首先根据你的DataFrame实际结构,对应两种可行写法:
场景1:最左侧无列名的内容是独立的列(列名为空字符串)
你之前的写法失效是因为str.contains默认遇到空值(NaN)会返回NaN,导致布尔索引失效,补全na参数即可:
# ~ 是取反操作,效果等价于 == False,写法更简洁 df = df[~df[''].str.contains('id', na=False)]
如果担心id前后有空白字符,可以加一层去空格处理:
df = df[~df[''].str.strip().str.contains('id', na=False)]
场景2:最左侧无列名的内容是DataFrame的行索引(index)
从你给出的样例数据结构来看,这种情况概率更高,你读入数据时大概率把第一列设为了行索引,此时不存在列名为空的列,直接删除索引值为id的行即可:
df = df.drop('id')
原有写法问题说明
df[df[""].str.contains("id")==False]:未处理空值场景,id行对应的其他列是空值,大概率空名列本身也存在NaN值,会导致str.contains返回非布尔值,过滤失效df.drop(1):硬编码删除索引值为1的行,仅当你的DataFrame是默认整数索引且id行对应索引值为1时才生效,兼容性极差
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

