python-3.x 如何根据列值的长度过滤数据框行

wnrlj8wa  于 2023-06-25  发布在  Python
关注(0)|答案(4)|浏览(82)

我有一个dataframe,其中一列包含以下字符串:

df=pd.DataFrame(['Hello world', 'World is good', 'Worldisnice hello'], columns=['A'])

df
                     A
0         'Hello world'
1       'World is good'
2   'Worldisnice hello'

我正在尝试获取包含一个单词的行,长度为11个字符
我使用下面的代码,它给出的是字符串的长度,而不是列中的单词

df = df[df['A'].apply(lambda x: len(x) == 11)]

得到以下结果:

df
                     A
0         'Hello world'

输出应为:

df
                     A
0   'Worldisnice hello'

Since是唯一一个包含一个长度等于11个字符的单词的
谢谢你

fnx2tebb

fnx2tebb1#

代码中的len(x)正在检查整个字符串的len。

>>> df.A.str.len()
 0    11
 1    13
 2    17

你需要做的是将字符串拆分成单词,并检查是否有任何单词的长度是== 11。
下面的代码是应该做的工作。

>>> df[df['A'].apply(lambda x: any(len(y) == 11 for y in x.split()))]
                  A
2  Worldisnice hello
vc9ivgsu

vc9ivgsu2#

另一种方法:

df[df.A.str.split().map(lambda x: any(len(y) == 11 for y in x))]

它规定:

A
2  Worldisnice hello
dxxyhpgq

dxxyhpgq3#

我喜欢明确定义简单的过滤函数。我发现它更容易阅读和维护。

In [8]: def f(row):
   ...:     words = row.A.split()
   ...:     for w in words:
   ...:         if len(w) == 11:
   ...:             return True
   ...: 

In [9]: df.loc[df.apply(f, axis=1) == True]
Out[9]: 
                   A
2  Worldisnice hello
flseospp

flseospp4#

您可以在不使用lambda函数的情况下使用字符串函数来完成此操作

df = df[df['A'].str.len() == 11]

相关问题