从字典列表创建 Pandas DataFrame?每个字典作为 DataFrame 中的行?
Creating a Pandas DataFrame from list of dictionaries? Each dictionary as row in DataFrame?
我浏览了几篇文章,但是,我无法弄清楚如何使用字典列表中的每个字典在 pandas 数据框中创建行。具体来说,我有两个问题是我有限的字典经验无法解决的。
- 到目前为止,我已将每个键和值分成两列,但是,我正在寻找的是为每个字典创建一行并将键用作列名。
- 只有每个字典中的第一个键是唯一的,因此我要么完全删除它,要么只使用该键作为值来填充名为“id”的列。
示例词典列表(总共 >500k):
pep_list=[{'HV404': 'WVLSQVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVR',
'gene': 'HV404',
'aa_comp': {'W': 4,
'V': 5,
'L': 5,
'S': 10,
'Q': 3,
'E': 1,
'G': 5,
'P': 2,
'K': 1,
'T': 2,
'C': 1,
'A': 1,
'I': 1,
'N': 1,
'R': 1},
'peptide': ['WVLSQVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVR'],
'Length': 43,
'z': 3,
'Mass': 4557,
'm/z': 1519.0},
{'A0A0G2JNQ3': 'ISGNTSR',
'gene': 'A0A0G2JNQ3',
'aa_comp': {'I': 1, 'S': 2, 'G': 1, 'N': 1, 'T': 1, 'R': 1},
'peptide': ['ISGNTSR'],
'Length': 7,
'z': 2,
'Mass': 715,
'm/z': 357.5},etc.]
预期输出:
Dataframe = pd.DataFrame({values from dictionaries}, columns=["id", "gene", 'aa_comp', 'peptide', 'length', 'z', 'mass','m/z')
id
columns of keys
dictionary 1
values in seperate columns
dictionary 2
values in seperate columns
感谢您的任何见解!
不管这些东西是什么
{'HV404': 'WVLSQVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVR',}
{'A0A0G2JNQ3': 'ISGNTSR',}
搞砸了,而且看起来不需要它们,因为信息重复了。
如果你想取出一个非代表性的密钥你可以这样做
key_intersect = set(pep_list[0].keys()).intersection(set(pep_list[1].keys()))
new_list_of_dictionaries = [{key:value for (key,value) in dicts.items() if key in key_intersect} for dicts in pep_list]
df = pd.DataFrame(new_list_of_dictionaries)
非常紧凑的代码,但如果需要,您可以在循环中展开它。谨防盲目取出第一个元素,除非是有序dict,否则不保证第一个元素相同
我浏览了几篇文章,但是,我无法弄清楚如何使用字典列表中的每个字典在 pandas 数据框中创建行。具体来说,我有两个问题是我有限的字典经验无法解决的。
- 到目前为止,我已将每个键和值分成两列,但是,我正在寻找的是为每个字典创建一行并将键用作列名。
- 只有每个字典中的第一个键是唯一的,因此我要么完全删除它,要么只使用该键作为值来填充名为“id”的列。
示例词典列表(总共 >500k):
pep_list=[{'HV404': 'WVLSQVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVR',
'gene': 'HV404',
'aa_comp': {'W': 4,
'V': 5,
'L': 5,
'S': 10,
'Q': 3,
'E': 1,
'G': 5,
'P': 2,
'K': 1,
'T': 2,
'C': 1,
'A': 1,
'I': 1,
'N': 1,
'R': 1},
'peptide': ['WVLSQVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVR'],
'Length': 43,
'z': 3,
'Mass': 4557,
'm/z': 1519.0},
{'A0A0G2JNQ3': 'ISGNTSR',
'gene': 'A0A0G2JNQ3',
'aa_comp': {'I': 1, 'S': 2, 'G': 1, 'N': 1, 'T': 1, 'R': 1},
'peptide': ['ISGNTSR'],
'Length': 7,
'z': 2,
'Mass': 715,
'm/z': 357.5},etc.]
预期输出:
Dataframe = pd.DataFrame({values from dictionaries}, columns=["id", "gene", 'aa_comp', 'peptide', 'length', 'z', 'mass','m/z')
id | columns of keys |
---|---|
dictionary 1 | values in seperate columns |
dictionary 2 | values in seperate columns |
感谢您的任何见解!
不管这些东西是什么
{'HV404': 'WVLSQVQLQESGPGLVKPSGTLSLTCAVSGGSISSSNWWSWVR',}
{'A0A0G2JNQ3': 'ISGNTSR',}
搞砸了,而且看起来不需要它们,因为信息重复了。
如果你想取出一个非代表性的密钥你可以这样做
key_intersect = set(pep_list[0].keys()).intersection(set(pep_list[1].keys()))
new_list_of_dictionaries = [{key:value for (key,value) in dicts.items() if key in key_intersect} for dicts in pep_list]
df = pd.DataFrame(new_list_of_dictionaries)
非常紧凑的代码,但如果需要,您可以在循环中展开它。谨防盲目取出第一个元素,除非是有序dict,否则不保证第一个元素相同