【问题标题】:Finding null values in a json record in a dataframe在数据框中的 json 记录中查找空值
【发布时间】:2021-02-05 20:36:09
【问题描述】:

假设我们有一个格式如下的数据框:

col1
{'overall_mean': '93.07', 'overall_median': '91.05'}
{}
{'overall_mean': '91.02', 'overall_median': '95.03'}

原始数据为json格式。我想从每一行中提取一些元素,这是我尝试过的:

 df['col1'].apply(lambda col: col['overall_mean'])

如果我们在字典中有那个元素,一切都很好,但如果我们没有,它就会抱怨并且有意义。然后我改成了这个:

 df['col1'].apply(lambda col: None if len(col['overall_mean']) == 1 else col['overall_mean'])

选择此条件len(col['overall_mean']) == 1 的原因是因为这是返回True 的唯一条件。但是它仍然找不到那些空值。

【问题讨论】:

  • 也许这个列表理解会做:df['col1'].apply(lambda col: col['overall_mean'] if 'overall_mean' in col else None)
  • 您能添加您的解决方案作为答案吗? get 方法工作得更快,但你的方法也有效。

标签: python json pandas dataframe null


【解决方案1】:

为什么不直接使用字典的 get 方法呢?如果键不在字典中,它将返回None

df.col1.map(lambda x: x.get('overall_mean'))

#0    93.07
#1     None
#2    91.02
#Name: col1, dtype: object

或者:df.col1.apply(lambda x: x.get('overall_mean'))

【讨论】:

    【解决方案2】:

    @Psidom 提供的不错的解决方案。只需使用列表推导从 cmets 复制一个替代项

    df['col1'].apply(lambda col: col['overall_mean'] if 'overall_mean' in col else None)
    

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-17
      • 2018-03-24
      • 2019-11-21
      • 1970-01-01
      相关资源
      最近更新 更多