【问题标题】:Pandas Dataframe Keep Row If Column Contains Any Designated Partial String如果列包含任何指定的部分字符串,Pandas 数据框保持行
【发布时间】:2018-08-21 00:09:30
【问题描述】:

我有一个熊猫数据框。下面是一个示例表。

Event   Text
A       something/AWAIT TO SHIP hello          
B       13579
C       AWAITING SHIP
D       24613
E       nan 

我只想在 Text 列中保留包含“AWAIT TO SHIP”字样或在 Text 列中包含字符串 13579 或 24613 的行。下面是我想要的表格:

Event   Text
A       something/AWAIT TO SHIP hello          
B       13579
D       24613

下面是我试过的代码:

df_STH001_2 = df_STH001[df_STH001['Text'].str.contains("AWAIT TO SHIP") == True | df_STH001['Text'].str.contains("13579") == True | df_STH001['Text'].str.contains("24613") == True]

以下是我得到的错误:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

【问题讨论】:

    标签: python string pandas find conditional


    【解决方案1】:

    您不应明确检查== True,而只需使用对contains 的调用。

    这是您的示例:

    首先,我们定义示例数据框:

    df1 = pd.DataFrame(data=[
    ('A', 'something/AWAIT TO SHIP hello'),
    ('B', 13579),
    ('C', 'AWAITING SHIP'),
    ('D', 24613),
    ('E', np.nan)], columns=['Event', 'Text'])
    

    然后我根据你的条件构建一个中间掩码:

    In [18]: mask = df1.Text.str.contains('AWAIT TO SHIP') |    \
                    df1.Text.str.contains('13579') | \
                    df1.Text.str.contains('24613')
    

    现在您可以使用此掩码索引原始数据帧。

    In [19]: df1.loc[mask]
    Out[19]: 
      Event                           Text
    0     A  something/AWAIT TO SHIP hello
    

    【讨论】:

      猜你喜欢
      • 2018-02-25
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      相关资源
      最近更新 更多