gpt4 book ai didi

python - 在 pandas 数据框中查找包含子字符串的值

转载 作者:行者123 更新时间:2023-12-01 03:53:35 25 4
gpt4 key购买 nike

我有一个带有字符串值的 pandas 数据框,我希望能够返回数据框的子集,其中值包含一些子字符串。以这种方式在系列上很容易做到这一点(改编自 pandas 文档的示例):

import pandas as pd
import numpy as np
s4 = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
s4[s4.str.contains('A', na=False)]
0 A
3 Aaba
6 CABA
dtype: object

我希望在数据帧的所有列中搜索子字符串的工作方式与系列相同,但数据帧没有 .str 方法。您可以过滤数据帧以精确匹配字符串,如下所示:

df = pd.concat((s4, s4.shift(1)), axis=1)
0 1
0 A NaN
1 B A
2 C B
3 Aaba C
4 Baca Aaba
5 NaN Baca
6 CABA NaN
7 dog CABA
8 cat dog

filtered_df = df[df == 'Baca']
0 1
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 Baca NaN
5 NaN Baca
6 NaN NaN
7 NaN NaN
8 NaN NaN

result = df[df contains 'ac']

我希望它能返回与 filtered_df = df[df == 'Baca'] 相同的内容,但这是无效的语法。我尝试使用 df.apply 将 series.str.contains 方法应用于数据帧的每个系列。如果这是一个可行的解决方案,我无法解决。我在 Linux/Ubuntu 上使用 python 3.5 和 pandas 0.18。

最佳答案

另一个解决方案是 apply contains :

mask = df.apply(lambda x: x.str.contains('A', na=False))
print (mask)

0 1
0 True False
1 False True
2 False False
3 True False
4 False True
5 False False
6 True False
7 False True
8 False False

print (df[mask])
0 1
0 A NaN
1 NaN A
2 NaN NaN
3 Aaba NaN
4 NaN Aaba
5 NaN NaN
6 CABA NaN
7 NaN CABA
8 NaN NaN

如果需要检查至少一个True,请使用 any :

mask = df.apply(lambda x: x.str.contains('ac', na=False))
print (mask)
0 1
0 False False
1 False False
2 False False
3 False False
4 True False
5 False True
6 False False
7 False False
8 False False

print (mask.any(1))
0 False
1 False
2 False
3 False
4 True
5 True
6 False
7 False
8 False
dtype: bool

关于python - 在 pandas 数据框中查找包含子字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37879217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com