从具有嵌套值列表的字典列表创建数据框

问题描述 投票:0回答:2

我找不到我的问题的类似答案,所以我们开始:我已爬网一个网站,并将数据以以下格式存储在CSV文件中:

data = [{"has_media": "false", "tags": ["e", "x", "y", "s", "f", "f"], "img_urls": [], "is_replied": "false", "is_reply_to": "false", "likes": 0, "links": [], "parent_id": "", "replies": 0, "reply_to_users": [], "comments": 1, "screen_name": "name", "text": "This is plain text retrieved from the webpage and a link http://ht.ly/25DQR and a hashtag #ecar", "text_html": "<p class=\"><s>#</s><b>electric</b></a></p>", "timestamp": "2010-08-01T09:37:20", "timestamp_epochs": 3749793792, "_id": "28829932", "_url": "/user/status/17479367564", "user_id": "1038493493", "username": "username", "video_url": ""}, {"has_media": "false", "hashtags": [""e", "o", "y", "p", "r", "s"], "img_urls": [], "is_replied": "false", "is_reply_to": "false", "likes": 0, "links": [], "parent_id": "", "replies": 0, "reply_to_users": [], "comments": 1, "screen_name": "user", "text": "New cooperative project: This is plain text retrieved from the webpage and a link http://ht.ly/25DQR and a hashtag #hello", "text_html": "<p class=\</b></a></p>", "timestamp": "2011-05-01T09:50:11", "timestamp_epochs": 18734839, "_id": "2982892", "_url": "/user/status/83982893", "user_id": "29983882", "username": "user", "video_url": ""}]

我想从中创建一个数据框,其中每个字典新行,而每个键表示一个列

我已经尝试过了,但是它只给我一栏,而且似乎不认识字典。

import pandas as pd
file = data.split(',')
pd.DataFrame.from_dict(file)

非常感谢您的帮助,因为我是编码的新手,可能需要一些帮助才能使它变得更好。

谢谢!

python pandas dataframe dictionary nested-lists
2个回答
0
投票

很简单。您可以使用:

df = pd.DataFrame(data)

另外,您还可以使用以下方法从文件中下载它:

df = pd.read_json(filename, orient='records')

0
投票

您在上面的代码中显示了词典列表。产生Pandas数据框(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html)要求数据输入为字典类型,而不是列表类型,因此您必须运行

df1 = pd.DataFrame(data[0])
df2 = pd.DataFrame(data[1])

或者您也可以摆脱列表符号,将两个词典合并为一个更大的词典。

这仍将编译以产生错误,但是,'所有数组的长度必须相同'。熊猫希望将数组的每个元素赋予数据框内的新行。在您的示例中,您有"links": []一个空数组,以及"tags": ["e", "x", "y", "s", "f", "f"]一个具有多个条目的数组(这些只是两个示例)。因此,您需要执行一些数据准备工作以确保所有阵列的长度相同。

鉴于您的大多数条目只有一个元素,我建议您将null值放入空数组"links": [np.nan]或只是一个空字符串。对于具有多个条目(例如“标签”)的数组,您可以尝试将其存储为只有一个值(该值是原始数组!)的数组。 “标签”:[[“ e”,“ x”,“ y”,“ s”,“ f”,“ f”]]

您的代码仍然存在语法错误,但是在任何此操作之前都需要修复!

© www.soinside.com 2019 - 2024. All rights reserved.