Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用特定键筛选字典列的数据帧_Python_Pandas_Dataframe_Dictionary - Fatal编程技术网

Python 使用特定键筛选字典列的数据帧

Python 使用特定键筛选字典列的数据帧,python,pandas,dataframe,dictionary,Python,Pandas,Dataframe,Dictionary,我有一个pandas DataFramedf,它有一列由字典组成的feats。我试图过滤数据帧,以仅保留列feats中具有名为color的特定键的行。下面给出了该列中的几个示例行 {'color':'blue', 'width':'20','height':'100'} {'color':'red', 'width':'15','height':'80'} {'width':'25','height':'75'} 我尝试了以下几种方法: 1. sub_df = df[['color' in x

我有一个pandas DataFrame
df
,它有一列由字典组成的
feats
。我试图过滤数据帧,以仅保留列
feats
中具有名为
color
的特定键的行。下面给出了该列中的几个示例行

{'color':'blue', 'width':'20','height':'100'}
{'color':'red', 'width':'15','height':'80'}
{'width':'25','height':'75'}
我尝试了以下几种方法:

1. sub_df = df[['color' in x.keys() for x in df.feats]]
我得到了以下错误:

AttributeError: 'NoneType' object has no attribute 'keys'

2. sub_df = df['color' in df['feats'].keys()]
我得到了这个错误:

KeyError: False
使用本文中的建议,我尝试了以下方法,因为我知道该键所采用的所有可能值

3. sub_df1 = df[df.feats.apply(lambda x: x['color'] == 'blue')]
这是我得到的错误:

KeyError: 'color'

我相信这一切都是因为某些行没有键
颜色
。因此,问题是如何克服这个问题来过滤数据帧?

您的
专长
列不仅包含字典,还包含隐藏为
None
的缺失数据。例如:

df = pd.DataFrame({'feats':[{'color':'blue', 'width':'20','height':'100'},
                            {'color':'red', 'width':'15','height':'80'},
                            {'width':'25','height':'75'}, 
                            None]})
为了确保只检查
dict
类型,我们可以使用
isinstance

df[[isinstance(x, dict) and ('color' in x.keys()) for x in df.feats]]
输出:

                                               feats
0  {'color': 'blue', 'width': '20', 'height': '100'}
1    {'color': 'red', 'width': '15', 'height': '80'}

这对我来说非常有效!非常感谢您为我节省了更多的试错时间。您不需要x.keys()。这是有效的:df[[isinstance(x,dict)和('color'在x中)在df.feats中代表x]]