【问题标题】:Find values in a pandas dataframe containing a substring在包含子字符串的 pandas 数据框中查找值
【发布时间】:2016-10-19 03:40:15
【问题描述】:

我有一个带有字符串值的 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。

【问题讨论】:

标签: python string pandas dataframe contains


【解决方案1】:

另一种解决方案是applycontains

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

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2019-12-02
    • 2016-12-14
    相关资源
    最近更新 更多