【问题标题】:Pandas.DataFrame filtering by column of stringsPandas.DataFrame 按字符串列过滤
【发布时间】:2017-12-09 21:50:05
【问题描述】:

我有一个这样的数据框:

import pandas as pd
df = pd.DataFrame()
df['trans'] = ['none', 'taxi', 'bus_101', 'bus_105', 'bus_106', 'car', 'horse']
df['cost']  = [1, 2, 3, 4, 5, 6, 7]

我想过滤掉所有的总线 ('bus_101', 'bus_105', 'bus_106')

我尝试了两种方法:

df['bus' not in df.trans].trans

并试图从 Series 中获取一个 str,以比较它的前 3 个字符:

df[df.trans[:3] != 'bus'].trans

df[df.trans.astype(str)[:3] != 'bus'].trans

没有成功。我希望结果是:

0       none
1       taxi
5        car
6      horse

但我实际上得到的只是错误。

【问题讨论】:

    标签: python string pandas dataframe filtering


    【解决方案1】:

    您可以使用str.contains

    df[~df.trans.str.contains('bus')]
    
       trans  cost
    0   none     1
    1   taxi     2
    5    car     6
    6  horse     7
    

    简要说明:

    df.trans.str.contains('bus')
    

    将检查'bus'是否包含在trans的值中:

    0    False
    1    False
    2     True
    3     True
    4     True
    5    False
    6    False
    Name: trans, dtype: bool
    

    可以通过~来否定它

    ~df.trans.str.contains('bus')
    
    0     True
    1     True
    2    False
    3    False
    4    False
    5     True
    6     True
    Name: trans, dtype: bool
    

    可以将此布尔系列传递给df 以选择所需的条目。

    【讨论】:

      【解决方案2】:

      这应该可行:

      import pandas as pd
      df= pd.DataFrame()
      df['trans'] = ['none', 'taxi', 'bus_101', 'bus_105', 'bus_106', 'car', 'horse']
      df['cost']  = [1, 2, 3, 4, 5, 6, 7]
      df[df['trans'].str.contains("bus") == False]
      
          trans   cost
      0   none    1
      1   taxi    2
      5   car     6
      6   horse   7
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多