使用pandas过滤dtype对象的DataFrame

时间:2015-11-06 02:27:32

标签: python json pandas

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

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())

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您可以在列上使用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]