Python 使用特定键筛选字典列的数据帧
我有一个pandas DataFramePython 使用特定键筛选字典列的数据帧,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
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]]