【问题标题】:Search for a row in a dataframe containing a string from a list在包含列表中的字符串的数据框中搜索一行
【发布时间】:2018-03-24 15:28:54
【问题描述】:

我正在尝试搜索row,其中包含列表中的字符串。

df:

           Column1            Out1
0          ['x', 'y']         (0, 2)
1          ['a', 'b']         (3, 0)
etc.

按照this 回答中的建议,我已尝试以下方法在list 下的list 中搜索包含'a' 的行 回答:

print df['Column1'].isin(['a'])

期待这样的结果:

1         ['a', 'b']          (3, 0)

但是,我似乎收到以下错误:

TypeError: unhashable type: 'list'

【问题讨论】:

    标签: python regex python-2.7 pandas


    【解决方案1】:

    需要in 来检查列表中的值:

    df = df[df['Column1'].apply(lambda x: 'a' in x)]
    

    示例:

    df = pd.DataFrame({'Column1':[['x','y'], ['a','b']],
                       'Out1':[(0,2), (3,0)]})
    print (df)
      Column1    Out1
    0  [x, y]  (0, 2)
    1  [a, b]  (3, 0)
    
    df1 = df[df['Column1'].apply(lambda x: 'a' in x)]
    print (df1)
      Column1    Out1
    1  [a, b]  (3, 0)
    

    df1 = df[['a' in x for x in df['Column1']]]
    print (df1)
      Column1    Out1
    1  [a, b]  (3, 0)
    

    【讨论】:

    • 太棒了。再次感谢! ;)
    • 一个比另一个有优势吗?
    • 难题,第二个应该快一点,但如果是 NaN 则失败。
    【解决方案2】:

    你一开始的做法是对的:

    df['Column1'].isin(['a'])
    

    但是你要用相同数据框的方括号括起来。

    这是一个例子:

    threads = ['1111', '2222', '3333', '4444']
    dev_data = train[(train['thread_col'].isin(threads))]
    

    (dev_data) 是一个包含结果行的数据框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多