我们面临的挑战是,我们有一个由字典( patents_original )列表组成的列的dataframe 。每个字典都包含像'inventor_last_name'这样的重发键。
[{'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"的项。
patents_inventors["inventor_last_name"] = [sub_dict["inventor_last_name"] for sub_dict in patents_inventors["inventors"]]发生下列错误:
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工作表的链接!
这是我们关于堆栈溢出的第一篇文章,所以如果是这样的话,请耐心等待我们。我们真的很感谢你的帮助!
编辑:
这些列名是:
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表格。希望这也有帮助。
发布于 2021-07-29 10:13:43
我个人更喜欢在这些情况下使用apply,因为它增加了可读性。从你的问题中,我不确定这是否是一个嵌套列表。
更新:字符串类型意味着您首先需要将对象解析为字典。
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])https://stackoverflow.com/questions/68573711
复制相似问题