如何将字典列表转换为DataFrame
?
[{'points': 50, 'time': '5:00', 'year': 2010},
{'points': 25, 'time': '6:00', 'month': "february"},
{'points':90, 'time': '9:00', 'month': 'january'},
{'points_h1':20, 'month': 'june'}]
我想把上面的代码转换成一个DataFrame
:
month points points_h1 time year
0 NaN 50 NaN 5:00 2010
1 february 25 NaN 6:00 NaN
2 january 90 NaN 9:00 NaN
3 june NaN 20 NaN NaN
注:列的顺序无关紧要。
7条答案
按热度按时间3z6pesqy1#
**Pyhton3:**前面列出的大多数解决方案都有效。但是,有时不需要 Dataframe 的row_number,并且必须单独写入每行(记录)。
在这种情况下,下面的方法很有用。
liwlm1x92#
我发现的最简单的方法是这样的:
eqqqjvef3#
我有以下带有datetime键和int值的指令列表:
我遇到了一个问题,用上面的方法将其转换为Dataframe,因为它创建了带有日期列的Dataframe ...
我的解决方案:
5fjcxozz4#
如果
ds
是dict
的列表:注意:这不适用于嵌套数据。
kb5ga3dv5#
如何将字典列表转换为PandasDataFrame?
其他的答案都是正确的,但是对于这些方法的优点和局限性解释得并不多。这篇文章的目的是展示这些方法在不同情况下的例子,讨论什么时候使用(什么时候不使用),并提出替代方法。
DataFrame()
、DataFrame.from_records()
和.from_dict()
根据数据的结构和格式,有时这三种方法都有效,有时某些方法比其他方法更有效,有时某些方法根本不起作用。
考虑一个非常人为的例子。
这个列表由所有键都存在的"记录"组成,这是你可能遇到的最简单的情况。
词典方向上的单词:x一米三英寸/x一米四英寸
在继续之前,区分不同类型的字典方向和Pandas支持很重要。主要有两种类型:"列"和"索引"。
orient='columns'
具有"列"方向的字典将使它们的键与等效DataFrame中的列相对应。
例如,上面的
data
位于"列"方向。一个二个一个一个
注意:如果您使用
pd.DataFrame.from_records
,方向将被假定为"列"(您不能指定其他方向),字典将相应地加载。orient='index'
在这个方向上,键被假定为对应于索引值,这种类型的数据最适合
pd.DataFrame.from_dict
。OP中未考虑该病例,但了解该病例仍然有用。
设置自定义索引
如果需要对结果DataFrame进行自定义索引,可以使用
index=...
参数进行设置。pd.DataFrame.from_dict
不支持此功能。处理缺少的键/列
当处理缺少键/列值的字典时,所有方法都是现成的。
正在读取列的子集
"如果我不想读取每一列该怎么办"?您可以使用
columns=...
参数轻松地指定这一点。例如,在上面的
data2
示例字典中,如果您只想读取列"A"、"D"和"F",可以通过传递一个列表来实现:默认方向为"columns"的
pd.DataFrame.from_dict
不支持此操作。正在读取行的子集
这些方法 * 直接 * 都不支持。您必须迭代数据,并在迭代时就地执行reverse delete。例如,要从上面的
data2
中只提取第0行和第2行,可以使用:万灵药:嵌套数据的
json_normalize
json_normalize
函数是上述方法的一个强大、健壮的替代方法,它处理字典(记录)列表,此外还可以处理嵌套字典。一个一个三个一个一个
同样,请记住传递给
json_normalize
的数据需要采用字典(记录)列表格式。如前所述,
json_normalize
还可以处理嵌套字典,下面是取自文档的一个示例。有关
meta
和record_path
参数的详细信息,请查看文档。总结
下面是上面讨论的所有方法以及支持的特性/功能的表格。
orient='columns'
,然后转置以获得与orient='index'
相同的效果。1szpjjfi6#
在Pandas16.2中,我必须执行
pd.DataFrame.from_records(d)
才能让它工作。c0vxltue7#
您还可以将
pd.DataFrame.from_dict(d)
用作: