我在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
函数不同意...
任何澄清都会很棒!
谢谢!
答案 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]