熊猫:Miscounting行数

时间:2017-07-26 13:59:27

标签: python pandas dataframe

我在Jupyter笔记本中使用Pandas。我有一个数据框result_df,其中包含一列_text。我试图过滤掉满足某个条件的行(特别是result_df [_text]中的单词数为0的行)。

当我开始时,我有这个:

len(result_df)

我回来了:

49708

然后我这样做:

result_df[result_df['_text'].apply(textstat.lexicon_count) != 0]

在笔记本中,我看到底部有一个巨大的数据框:

49701 rows × 5 columns

然而,当我跑:

len(result_df)

我回来了:

49708

所以现在我非常困惑:看起来我已经删除了7行,但len函数不同意...

任何澄清都会很棒!

谢谢!

2 个答案:

答案 0 :(得分:3)

覆盖会有所帮助。使用以下代码行:

result_df = result_df[result_df['_text'].apply(textstat.lexicon_count) != 0]
len(result_df)

答案 1 :(得分:3)

您所做的只是使用布尔索引获取原始数据框的视图。没有改变。举个例子:

In [108]: df
Out[108]: 
   colx  coly name
0     1     5  foo
1     2     6  foo
2     3     7  bar
3     4     8  bar

In [109]: len(df)
Out[109]: 4

现在,使用colx>查找所有行的索引3:

In [110]: df[df['colx'] > 3]
Out[110]: 
   colx  coly name
3     4     8  bar

In [111]: len(df[df['colx'] > 3])
Out[111]: 1

但是,如果你打印出原来的df:

In [112]: df
Out[112]: 
   colx  coly name
0     1     5  foo
1     2     6  foo
2     3     7  bar
3     4     8  bar

如果要将数据框重新分配给切片,则需要明确指定它:

result_df = result_df[result_df['_text'].apply(textstat.lexicon_count) != 0]