【问题标题】:Filter DataFrame of dtype object using pandas使用 pandas 过滤 dtype 对象的 DataFrame
【发布时间】:2015-11-06 02:27:31
【问题描述】:

我需要使用以下操作来解析数据。

data=[{'a': 1, 
       'b': {1: 1, 
             2: 2}, 
       'c': ['q', 'w', 'e', 'r', 't', 'y']},  
      {'a': 2, 
       'b': {1: 2, 
             2: 3}, 
       'c': ['q', 't', 'a', 'v', 'o', 'l']}]

df = pd.DataFrame(data)

我想获取满足如下条件的数据:

print(df['q' in df.c].head())

但是,我收到一个错误:

File "pandas/hashtable.pyx", line 676, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12216)
KeyError: False

为什么这不起作用?

我很困惑,因为以下代码的工作方式与解析对象 dtype 时不同:

print(df[df.a == 1].head())

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    in 用于索引检查。对于值,您可以使用 str.contains():

    df.c.str.contains("q", regex=False)
    

    【讨论】:

    • 感谢您的回答!
    • 这不起作用,因为 col c 包含列表作为元素
    • @EdChum,它可以工作,因为当regexFalse 时包含使用in
    • 好的,不知道+1
    【解决方案2】:

    您可以在列上使用apply 来生成描述所需列的布尔掩码,然后通过此掩码过滤DataFrame:

    >>> df[df.c.apply(lambda val: 'q' in val)]
       a             b                   c
    0  1  {1: 1, 2: 2}  [q, w, e, r, t, y]
    1  2  {1: 2, 2: 3}  [q, t, a, v, o, l]
    

    【讨论】:

    • 谢谢。但是我可以将此方法用于相同的多个值,例如'q'和't'吗??
    • 你可以使用'q' in val or 't' in val
    猜你喜欢
    • 2019-10-07
    • 2023-02-10
    • 2019-06-16
    • 2014-02-06
    • 2020-11-29
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多