将具有不同值的 JSON 提取到 pandas 中的重复 id 列

我有以下数据框:


df = pd.DataFrame({'id':['0001', '0001'],

                   'vat_countries': [{'vat': 21, 'country': 'ES'}, 

                                     {'vat': 23, 'country': 'GR'}]

                   })


id        vat_countries

0001     {'vat': 21, 'country': 'ES'}

0001     {'vat': 23, 'country': 'GR'}

我想要得到的是:


id   vat  country

0001  21    'ES'

0001  23    'GR'

阅读其他问题我得到以下代码:


df = df.drop('vat_countries', 1).assign(**pd.DataFrame(list_df['vat_countries'].values.tolist()))

然而,这给了我:


id   vat  country

    0001  21    'ES'

    0001  21    'ES'

这是错误的。


我已经能够使用以下方法获得我想要的结果:


c = pd.concat([pd.DataFrame(df[column].values.tolist()), 

               df.drop(column, 1).reset_index()], 

              axis=1, ignore_index=True)

但这需要手动输入列名称。否则,列名称为 0、1、2、3...


有什么方法可以在保留列名称的同时获得所需的输出?谢谢


青春有我
浏览 123回答 3
3回答

守着星空守着你

尝试pop修复您的代码df.join(pd.DataFrame(df.pop('vat_countries').tolist(),index=df.index))Out[300]:      id  vat country0  0001   21      ES1  0001   23      GR

天涯尽头无女友

您可以使用以下方法访问各个值string methods:df["vat"] = df.vat_countries.str["vat"]df["country"] = df.vat_countries.str["country"]df          id         vat_countries               vat  country0   0001    {'vat': 21, 'country': 'ES'}    21  ES1   0001    {'vat': 23, 'country': 'GR'}    23  GR

蛊毒传说

我会pd.Series在带有 s 的列中应用dict,并join用原始结果,即:import pandas as pddf = pd.DataFrame({'id':['0001', '0001'], 'vat_countries': [{'vat': 21, 'country': 'ES'}, {'vat': 23, 'country': 'GR'}]})final_df = df.join(df.vat_countries.apply(pd.Series))print(final_df)输出:     id                 vat_countries  vat country0  0001  {'vat': 21, 'country': 'ES'}   21      ES1  0001  {'vat': 23, 'country': 'GR'}   23      GR正如您所看到的,vat_countires 被留下,如果您想放弃它,您可以简单地删除drop它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python