【问题标题】:Slice Pandas Column containing dic value切片包含 dic 值的 Pandas 列
【发布时间】:2021-11-09 17:53:29
【问题描述】:

下面是我的 DF:

df = pd.DataFrame({'Name': ['AZ', 'AF'], 'Other_Name': [np.nan, [{'name': 'ARES ZAN', 'language': 'en', 'type': 'ALTERNATIVE'}]]})


Name    Other_Name
0   AZ  NaN
1   AF  [{'name': 'ARES ZAN', 'language': 'en', 'type': 'ALTERNATIVE'}]

目的是将“Other_Name”列替换为“Other_Name_name”、“Other_Name_language”、“Other_Name_type”

我得到了来自Slice pandas dataframe json column into columns的帮助

此外,由于我有一些 NaN(我不想删除),因此该解决方案不起作用。

感谢任何帮助!

【问题讨论】:

    标签: python json pandas


    【解决方案1】:

    您可以执行以下操作:

    all_keys = ['name', 'language', 'type']
    for key in all_keys:
      df.loc[df.Other_Name.notnull(), 'Other_Name_' + key] = df.loc[df.Other_Name.notnull(), 'Other_Name']\
                                                               .explode()\
                                                               .apply(lambda x: x[key])
    

    输出:

        Other_Name_name     Other_Name_language     Other_Name_type
    0   NaN                       NaN                  NaN
    1   ARES ZAN                  en                  ALTERNATIVE
    

    【讨论】:

      【解决方案2】:
      def change_key(x):
          for data_dict in x:
              for key in list(data_dict.keys()):
                  data_dict[f'Other_Name_{key}'] = data_dict.pop(key)
      
          return x
      
      df.loc[~df['Other_Name'].isnull(), 'Other_Name'] = df[~df['Other_Name'].isnull()]['Other_Name'].apply(change_key)
      print(df)
      

      【讨论】:

        猜你喜欢
        • 2019-01-12
        • 1970-01-01
        • 2019-08-10
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        相关资源
        最近更新 更多