Python 使用dataframe中的字数来删除只有一个字的行

Python 使用dataframe中的字数来删除只有一个字的行,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有2条记录的数据帧(数据): id text 0001 The farmer plants grain 0002 tuna 我想计算此数据框的text列中的字数,并删除只有一个字的行 我知道如何计算字数: count = data['text'].str.split().str.len() 如何使用结果运行将在数据帧中删除行的IF语句?任何IF语句,例如 if count == 1: print('drop') …导致此错误: Traceback (most r

我有一个带有2条记录的数据帧(数据):

id    text
0001  The farmer plants grain
0002  tuna
我想计算此数据框的
text
列中的字数,并删除只有一个字的行

我知道如何计算字数:

count = data['text'].str.split().str.len()
如何使用结果运行将在数据帧中删除行的IF语句?任何IF语句,例如

if count == 1:
    print('drop')
…导致此错误:

Traceback (most recent call last):

  File "<ipython-input-118-b3fcb0218e8e>", line 32, in <module>
    if count == 1:

  File "C:\Users\taca\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\generic.py", line 917, in __nonzero__
    .format(self.__class__.__name__))

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
回溯(最近一次呼叫最后一次):
文件“”,第32行,在
如果计数=1:
文件“C:\Users\taca\AppData\Local\Continuum\Anaconda3\lib\site packages\pandas\core\generic.py”,第917行,非零__
.format(self.\uuuuuu class.\uuuuuuu.\uuuuuu name.\uuuuuuuuu))
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我已经阅读了Pandas文档和其他关于此错误的问题,但我似乎无法找到正确应用于IF语句问题的解决方案

任何建议都将不胜感激!由于我对SO比较陌生,请告诉我是否有什么可以改进我的问题

使用遮罩:

dropped = data[~(count==1)].copy()
说明:

因此,假设df具有:

data = pd.DataFrame({'text': ['hello my name is','hey']})
使用计数方法,您可以检查它是否为1,创建布尔掩码:

count = data['text'].str.split().str.len()
~(count==1)
Out[18]: 
0     True
1    False
Name: text, dtype: bool
现在,您可以应用该遮罩:

data[~(count==1)]
Out[22]: 
               text
0  hello my name is

我只是想看看有没有空位

data = data[data.text.str.contains(' ')]
data

     id                     text
0  0001  The farmer plants grain
或者更普遍地使用count

data = data[data.text.str.count(' ') > 0]
data

     id                     text
0  0001  The farmer plants grain

怎么了

count = data['text'].str.split().str.len()
运行此操作将导致
count
成为长度的
pandas.Series

count == 1

是真值的
系列
if count==1
没有意义,因为它试图确定整个序列是否为
True
。它不是
True
False
。你必须用不同的方式来实现你的目标。我已经提供了一种方法来做到这一点。@StevenG也是如此。

只需为数据帧使用条件参数即可。是这样的:

df=df[df['column'].str.contains('')]


两个词之间有一个空格

回答可能晚了,但这可能有助于新观众
您可以轻松地找到与所需内容匹配的行的索引,并将它们从数据帧中删除

wantedRows = data[data['text'].str.split().str.len()==1].index 
data =  data.drop(wantedRows, axis = 0)

谢谢你能再解释一下吗?我试着打印
删除的
,它返回一个空的数据框。@CameronTaylor我忘记了(),更正了答案,添加了信息谢谢,现在当我打印
删除的
时,我看到行减少了-我想我只是不确定如何从数据框中实际删除行以向前移动。此外,我还想找出一种执行if语句的方法,以便对一个单词的行和多个单词的行执行不同的操作。但这不是这个问题的重点。再次感谢。当我尝试将其放入IF语句中,然后删除有问题的行时,仍然会出现相同的错误:
IF data[data.text.str.count(“”)==0]
我如何从中删除列?将IF语句与您提供的语句一起使用会遇到相同的错误,这是因为不需要IF。这段代码已经删除了没有空格的行。只要在我编写它时键入它,然后再次检查您的数据帧。您将看到包含单个单词的行不再存在!:)作为一个小的跟进(如果我需要发布一个新问题,请让我知道),除了放弃,我如何指定不同的操作?对于包含空格的行,print('yes'),else print('no')?我不确定是否完全理解了您的问题。但是,如果您想根据空格的存在或不存在添加一个新列,该列的值为true或false,您可以尝试df['spaces']=df['text'].str.contains(“”),它会将一列添加到现有的数据帧中,如果您只想让输出说明它是否有空格,只需编写:*df['text'].str.contains(“”)*