pandas 如何在Python中从 Dataframe 中获取特定的短语?

4uqofj5v  于 2023-05-27  发布在  Python
关注(0)|答案(2)|浏览(125)

我过滤了数据框中包含“no”一词的列。我想把那些带“不”的短语打印出来。
例如,如果这是我的数据集:

index | Column 1
------------------------------------------------------------------------ 
  0   | no school for the rest of the year. no homework and no classes
  1   | no more worries. no stress and no more anxiety
  2   | no teachers telling us what to do

我想得到“no”后面的单词/短语。正如你所看到的,单词“no”在一些字符串中出现超过1次。我希望我的输出是

no school
no homework
no classes
no more worries
no stress
no more anxiety
no teachers

这是我目前为止的代码:

#make a copy of the column I'd like to filter
copy = df4['phrases'].copy()

#find rows that contain the word 'no'
nomore = copy.str.contains(r'\bno\b',na=False)

#split words in each string
copy.loc[nomore] = copy[nomore].str.split()

我不知道如何连接这些短语。我试过了

for i in  copy.loc[nomore]:
    for x in i: 
        if x == 'no':
            print(x,x+1)

但这不起作用。它不能识别x == 'no',并给出x+1错误。
我该怎么解决这个问题?
感谢您花时间阅读我的帖子,并以任何方式提供帮助。我真的很感激。

nwlls2ji

nwlls2ji1#

下面是str.findall()explode()的一种方法

df['col'].str.findall(r'no (?:more )?\w+').explode().tolist()

输出:

['no school',
 'no homework',
 'no classes',
 'no more worries',
 'no stress',
 'no more anxiety',
 'no teachers']
enyaitl3

enyaitl32#

您可以使用str.extractall获得所有“no”短语的列表,匹配no,后跟一个可选的“more”和一个单词,然后将结果转换为列表:

df['phrases'].str.extractall(r'\b(no(?:\s+more)?\s+[a-zA-Z]+)')[0].to_list()

输出:

[
 'no school',
 'no homework',
 'no classes',
 'no more worries',
 'no stress',
 'no more anxiety',
 'no teachers'
]

然后,您可以处理列表(例如:print)如您所愿。

相关问题