如何在Pandas DataFrame中删除含指定字符的行并生成独立新表
Pandas 筛选后生成独立数据框解决方案
你遇到的两个问题可以通过增加两个方法调用解决:
- 要生成完全独立于原df的新数据框(非视图),需要在筛选逻辑后加
.copy()强制生成深拷贝 - 要解决索引跳空的问题,调用
.reset_index(drop=True)重置为从0开始的连续索引
优化后的完整代码
df2 = df[~df[6].str.contains("\?", na=False)].copy().reset_index(drop=True)
参数说明
~是pandas中的逻辑取反运算符,和你原写法的==False逻辑完全等价,是更通用的写法na=False用来处理第6列存在空值的场景:遇到空值时默认返回False,避免空值导致筛选逻辑报错.copy()强制生成深拷贝,新生成的df2和原df完全独立,修改其中一个不会影响另一个reset_index(drop=True)重置行索引为连续整数,drop=True表示丢弃原来的旧索引,不会将其作为新列加入数据框
如果你需要保留原来的行索引,不需要重置连续索引,仅要独立副本可以用以下代码:
df2 = df[~df[6].str.contains("\?", na=False)].copy()
注:你之前观察到的索引跳空不是视图导致的,是pandas筛选操作的默认行为:筛选后会保留原数据框的行索引,就算是深拷贝对象如果不主动重置索引也会出现跳空情况。
原问题参考数据框样式

内容的提问来源于stack exchange,提问作者reloh100
相关产品推荐
相关产品推荐

