Python Panda df.loc成功但删除的行仍然存在

时间:2018-03-23 07:04:06

标签: python pandas dataframe

我有一个正常的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)

1 个答案:

答案 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))`