【问题标题】:How to extract entire rows from pandas data frame, if a column's string value contains a specific pattern如果列字符串值包含特定模式,如何从熊猫数据框中提取整行
【发布时间】:2020-02-09 14:00:44
【问题描述】:

我有以下数据框,其中“名称”列的值中有一个模式“///”

data = [['a1','yahoo', 'apple'], ['a2','gma///il', 'mango'], ['a3','amazon', 'papaya'], 
['a4','bi///ng', 'guava']] 
df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info']) 

如果列“名称”的值中包含模式“///”,我需要从该数据框中提取整行。我尝试了以下代码,但得到一个空数据框。

new_df = df.loc[df['Name'] == '///']

我的预期输出应该给我这样的数据框:

data_new = [['a2','gma///il', 'mango'],['a4','bi///ng', 'guava']] 
new_df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info'])  
print(new_df)

【问题讨论】:

  • new_df = df[ df['Name'].str.contains('///') ]

标签: python regex pandas dataframe pattern-matching


【解决方案1】:

DataFrame 对此有字符串函数contains()

 new_df = df[ df['Name'].str.contains('///') ]

【讨论】:

    【解决方案2】:

    如果您想过滤特定的一列,请使用此解决方案

    import numpy as np
    immport pandas as pd
    
    data = [['a1','yahoo', 'apple'], ['a2','gma///il', 'mango'], ['a3','amazon', 'papaya'], 
    ['a4','bi///ng', 'guava']] 
    df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info']) 
    
    mask = np.column_stack([df['Name'].str.contains(r"\///", na=False)]) 
    df.loc[mask.any(axis=1)]
    

    输出:

       ID      Name   Info
    1  a2  gma///il  mango
    3  a4   bi///ng  guava
    

    如果您需要针对某些模式过滤所有列,请参阅以下解决方案

    import numpy as np
    mask = np.column_stack([df[col].str.contains(r"\///", na=False) for col in df]) 
    df.loc[mask.any(axis=1)]
    

    输出:

       ID      Name   Info
    1  a2  gma///il  mango
    3  a4   bi///ng  guava
    

    【讨论】:

      【解决方案3】:

      使用Series.str.contains:

      import pandas as pd
      
      data = [['a1','yahoo', 'apple'], ['a2','gma///il', 'mango'],
              ['a3','amazon', 'papaya'],['a4','bi///ng', 'guava']]
      
      df = pd.DataFrame(data, columns = ['ID', 'Name', 'Info'])
      
      print (df[df["Name"].str.contains("///")])
      
      #
         ID      Name   Info
      1  a2  gma///il  mango
      3  a4   bi///ng  guava
      

      【讨论】:

        猜你喜欢
        • 2015-04-25
        • 2022-11-27
        • 2018-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多