gpt4 book ai didi

python - 如何通过循环将字典列表的列表转换为数据框

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:59 25 4
gpt4 key购买 nike

我有一个字典列表。我设法访问了外部列表中的每个列表元素,并通过 pandas 将字典转换为数据框。然后我保存 DF 并稍后连接它。这是一个完美的结果。但我需要一个循环来处理大数据。

这是我的 MWE,原则上工作正常。

import pandas as pd

mwe = [
[{"name": "Norway", "population": 5223256, "area": 323802.0, "gini": 25.8}],
[{"name": "Switzerland", "population": 8341600, "area": 41284.0, "gini": 33.7}],
[{"name": "Australia", "population": 24117360, "area": 7692024.0, "gini": 30.5}],
]

df0 = pd.DataFrame.from_dict(mwe[0])
df1 = pd.DataFrame.from_dict(mwe[1])
df2 = pd.DataFrame.from_dict(mwe[2])

frames = [df0, df1, df2]
result = pd.concat(frames)

它创建了一个漂亮的表格。

enter image description here

这是我尝试创建数据框列表的内容:

for i in range(len(mwe)): 
frame = pd.DataFrame()
frame = pd.DataFrame.from_dict(mwe[i])
frames = []
frames.append(frame)

附录:感谢您的所有回答。他们正在研究我的 MWE。这让我注意到我的数据集中有一些奇怪的条目。没有解决方案适用于我的数据集,因为我有一个包含两个字典的内部列表元素(由于非唯一数据检索):

....[{'name': '美国本土外小岛屿', '人口': 300}, {'名称':'美利坚合众国', '人口':323947000, '地区':9629091.0, '基尼':48.0}],...

如何删除“美国本土外小岛屿”条目?

最佳答案

您可以从包含列表中取出每个字典,并只得到一个包含 dictlist:

import pandas as pd
mwe = [[{'name': 'Norway', 'population': 5223256, 'area': 323802.0, 'gini': 25.8}],
[{'name': 'Switzerland',
'population': 8341600,
'area': 41284.0,
'gini': 33.7}],
[{'name': 'Australia',
'population': 24117360,
'area': 7692024.0,
'gini': 30.5}]]

# use x.pop() so that you aren't carrying around copies of the data
# for a "big data" application
df = pd.DataFrame([x.pop() for x in mwe])


df.head()
area gini name population
0 323802.0 25.8 Norway 5223256
1 41284.0 33.7 Switzerland 8341600
2 7692024.0 30.5 Australia 24117360

通过将列表理解引入数据框声明,该列表是临时的,您不必担心清理。 pop 还将消耗 mwe 中的字典,从而最大限度地减少内存中携带的副本数量

请注意,执行此操作时,mwe 将如下所示:

mwe
[[], [], []]

因为子列表的内容已经弹出

编辑:新问题内容

如果您的数据包含重复项,或者至少包含您不想要的条目,并且不需要的条目与数据集的其余部分没有匹配的列(看起来是这种情况),则变得有点棘手避免像上面那样复制数据:

mwe.append([{'name': 'United States Minor Outlying Islands', 'population': 300}, {'name': 'United States of America', 'population': 323947000, 'area': 9629091.0, 'gini': 48.0}])

key_check = {}.fromkeys(["name", "population", "area", "gini"])

# the easy way but copies data
df = pd.DataFrame([item for item in data
for data in mwe
if item.keys()==key_check.keys()])

因为您仍会在 mwe 中保留数据。使用生成器可能会更好

def get_filtered_data(mwe):
for data in mwe:
while data: # when data is empty, the while loop will end
item = data.pop() # still consumes data out of mwe
if item.keys() == key_check.keys():
yield item # will minimize data copying through lazy evaluation

df = pd.DataFrame([x for x in get_filtered_data(mwe)])

area gini name population
0 323802.0 25.8 Norway 5223256
1 41284.0 33.7 Switzerland 8341600
2 7692024.0 30.5 Australia 24117360
3 9629091.0 48.0 United States of America 323947000

同样,这是在假设不需要的条目具有无效列的情况下,具体而言,这里似乎就是这种情况。否则,这至少会展平数据结构,以便您稍后可以使用 pandas 对其进行过滤

关于python - 如何通过循环将字典列表的列表转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56292928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com