求助:将含字典列表的元组转换为非规范化DataFrame遇异常
问题:将包含字典列表的元组转换为Pandas DataFrame
我有一个元组,移除第二个元素后仅剩一个包含200个字典的列表,示例如下:
import datetime mytuple= ([{'reviewId': '1234', 'userName': 'XXX', 'userImage': 'imagelink', 'content': 'AAA', 'score': 1, 'thumbsUpCount': 1, 'reviewCreatedVersion': '3.31.0', 'at': datetime.datetime(2022, 12, 1, 11, 49, 34), 'replyContent': "replycontent", 'repliedAt': datetime.datetime(2022, 12, 1, 12, 19, 51)}, {'reviewId': '5678', 'userName': 'S L', 'userImage': 'imagelink2', 'content': "content2", 'score': 1, 'thumbsUpCount': 0, 'reviewCreatedVersion': '3.31.0', 'at': datetime.datetime(2022, 11, 29, 12, 27, 46), 'replyContent': "replycontent2", 'repliedAt': datetime.datetime(2022, 11, 29, 12, 30, 40)}])
我希望将其转换为以字典键为列名的DataFrame,预期格式如下:
| reviewId | userName | userImage | content | score | thumbsUpCount | reviewCreatedVersion | at | replyContent | repliedAt |
|---|---|---|---|---|---|---|---|---|---|
| 1234 | XXX | imagelink | AAA | 1 | 1 | 3.31.0 | 2022-12-01 11:49:34 | replycontent | 2022-12-01 12:19:51 |
| 5678 | S L | imagelink2 | content2 | 1 | 0 | 3.31.0 | 2022-11-29 12:27:46 | replycontent2 | 2022-11-29 12:30:40 |
即列名为字典的键,每行对应一个字典的键值对。
我尝试了以下三种方法:
df=pd.DataFrame(mytuple) df=pd.DataFrame.from_dict(mytuple) df=pd.json_normalize(mytuple)
但生成的DataFrame不符合预期,结果如下:
| 0 | 1 | 2 | 3 |
|---|---|---|---|
| {'reviewId': '1234', ...} | {'reviewId': '5678', ...} | {} | {} |
想知道哪里操作出错了?
解决方案
问题出在你传入的是元组,而Pandas的DataFrame()、from_dict()、json_normalize()都期望直接传入字典列表,而非包含列表的元组。你需要先提取元组中的字典列表,再传入Pandas方法:
方法1:提取元组第一个元素后转换
import pandas as pd import datetime mytuple= ([{'reviewId': '1234', ...}, {'reviewId': '5678', ...}]) # 提取元组内的字典列表 dict_list = mytuple[0] # 转换为目标DataFrame df = pd.DataFrame(dict_list)
方法2:用json_normalize直接提取列表
df = pd.json_normalize(mytuple[0])
以上两种方式都能生成符合预期、以字典键为列名的DataFrame。
内容的提问来源于stack exchange,提问作者harishsriram
相关产品推荐
相关产品推荐

