首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dataframe:拆分包含字典列表的列

Dataframe:拆分包含字典列表的列
EN

Stack Overflow用户
提问于 2021-07-29 09:48:01
回答 1查看 237关注 0票数 0

我们面临的挑战是,我们有一个由字典( patents_original )列表组成的列的dataframe 。每个字典都包含像'inventor_last_name'这样的重发键。

代码语言:javascript
复制
[{'inventor_last_name': 'Han', 'inventor_first_name': 'Shu-Jen', 'inventor_country': 'US', 'inventor_key_id': '104654'}, {'inventor_last_name': 'Chen', 'inventor_first_name': 'Chia-Yu', 'inventor_country': 'US', 'inventor_key_id': '367934'}]

我们正在寻找仅包含重复密钥项的列。这样,一行的每个'inventor_last_name'都会在一个名为'inventor_last_name'的新列中列出(当包含多个投资者时,他们的所有姓氏都应该在一个名为“inventor_last_name”的列中列出)。对于下面的分析,非常重要的是,线的从属关系是不改变。之后,新的dataframe应该包含4个新列,名为'inventor_last_name''inventor_first_name''inventor_country''inventor_key_id' (以前字典的键)。

堆栈溢出提供了以下代码片段,以创建一个新列并填充键"inventor_last_name"的项。

代码语言:javascript
复制
patents_inventors["inventor_last_name"] = [sub_dict["inventor_last_name"] for sub_dict in patents_inventors["inventors"]]

发生下列错误:

代码语言:javascript
复制
patents_inventors["inventor_last_name"] = [ sub_dict["inventor_last_name"] for sub_dict in patents_inventors["inventors"]]
Traceback (most recent call last):

  File "<ipython-input-46-2c776eb8a76d>", line 1, in <module>
    patents_inventors["inventor_last_name"] = [ sub_dict["inventor_last_name"] for sub_dict in patents_inventors["inventors"]]

  File "<ipython-input-46-2c776eb8a76d>", line 1, in <listcomp>
    patents_inventors["inventor_last_name"] = [ sub_dict["inventor_last_name"] for sub_dict in patents_inventors["inventors"]]

TypeError: string indices must be integers

对于我们来说,作为绝对的Python爱好者,Python似乎没有将这一行解释为字典列表。所有将列传输到数据类型列表或字典的尝试都失败。

如果有帮助的话,我可以为您提供可编辑的excel工作表的链接!

这是我们关于堆栈溢出的第一篇文章,所以如果是这样的话,请耐心等待我们。我们真的很感谢你的帮助!

编辑:

这些列名是:

代码语言:javascript
复制
patent_number
patent_title
patent_abstract
patent_date
patent_num_combined_citations
patent_num_cited_by_us_patents
inventors
assignees
applications
cited_patents
citedby_patents
cpcs
wipos

由于我不太清楚如何缩短数据在这里张贴它,我是链接图片到相应的excel表格。希望这也有帮助。

使用相应的excel表

EN

回答 1

Stack Overflow用户

发布于 2021-07-29 10:13:43

我个人更喜欢在这些情况下使用apply,因为它增加了可读性。从你的问题中,我不确定这是否是一个嵌套列表。

更新:字符串类型意味着您首先需要将对象解析为字典。

代码语言:javascript
复制
import json
patents_inventors['parsed_inventors'] = patents_inventors['inventors'].apply(lambda x: [json.loads(y) for y in x])

patents_inventors['inventor_last_name'] = patents_inventors['parsed_inventors'].apply(lambda x: [y['inventor_last_name'] for y in x])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68573711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档