我有一个正常的csv文件导入为panda df。然后我使用下面的代码选择从df中删除一些行。
df.loc[:,"Tobacco"].fillna('No involvement', inplace=True)
df = df[df.loc[:,"Tobacco"] == 'No involvement']
Spyder显示df的行数从8000行减少到7000行(删除了1000行)。我检查len(df)是7000.但是,我双击Spyder变量窗口来查看df,删除的行仍在那里,它们在df(索引7000到8000)的末尾组合在一起。
这使我无法继续继续,如下一部分,当我需要使用len(df)循环df时,它不会影响那1000行,我不知道如何删除它们(我也试图删除使用索引7000到8000。
我已经在Anaconda Spyder上测试了这个代码,在Windows上安装了Python 3,在Linux上运行了PyCharm,在Linux上运行了本机Python,并且得到了同样的错误。
我也试过
df = df[df['Tobacco'] == 'No involvement']
编辑:我收到了此警告消息(有时会出现警告,但有时我再次运行并且没有警告)
C:\ ProgramData \ Anaconda3 \ lib中\站点包\大熊猫\核心\ generic.py:3660: SettingWithCopyWarning:尝试在a的副本上设置值 来自DataFrame的切片
请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy self._update_inplace(NEW_DATA)
答案 0 :(得分:0)
我无法复制此内容。尝试下面的代码,看看这段代码是否也是如此。
df = pd.DataFrame({'A':[4,6,7,65,75,645,5,7,5,75,5]})
df.iloc[3:8]=np.nan # set sum values as NaN to simulate the NaN
print(df.shape)
df.loc[:,"A"].fillna('No involvement', inplace=True)
print(df.shape)
df = df[df.loc[:,"A"] == 'No involvement']
print(df.shape)
print(len(df))`