我有一个这样的字典列表:
[{'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'}]
我想把它变成熊猫,就像这样:
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
注意:列的顺序无关紧要。
如何将字典列表转换为如上所示的pandas数据框?
其他的答案是正确的,但没有多少解释这些方法的优点和局限性。这篇文章的目的是展示这些方法在不同情况下的例子,讨论何时使用(何时不使用),并提出替代方案。
^{} 、^{} 和^{}
根据数据的结构和格式,有些情况下,三种方法都可以工作,有些方法工作得更好,有些根本不工作。
举一个非常做作的例子。
此列表由“记录”组成,每个键都存在。这是你可能遇到的最简单的情况。
字典方向上的单词:
orient='index'
/'columns'
在继续之前,重要的是区分不同类型的字典方向,并支持熊猫。有两种主要类型:“列”和“索引”。
orient='columns'
具有“columns”方向的字典的键将与等效数据帧中的列相对应。
例如,上面的
data
位于“列”方向。注意:如果您使用的是
pd.DataFrame.from_records
,则方向假定为“列”(您不能另外指定),并且字典将相应地加载。orient='index'
使用这个方向,键被假定与索引值相对应。这种数据最适合于
pd.DataFrame.from_dict
。本案不在手术室考虑,但仍需了解。
设置自定义索引
如果需要生成的数据帧上的自定义索引,可以使用
index=...
参数对其进行设置。这不受
pd.DataFrame.from_dict
支持。处理丢失的键/列
当处理缺少键/列值的字典时,所有方法都是开箱即用的。例如
读取列的子集
“如果我不想在每一个专栏里都读呢?”?您可以使用
columns=...
参数轻松地指定它。例如,从上面
data2
的示例字典中,如果您只想读取列“A”、“D”和“F”,可以通过传递列表来执行此操作:具有默认方向“列”的
pd.DataFrame.from_dict
不支持此操作。读取行的子集
这些方法中的任何一种都不支持直接。您必须迭代数据并在迭代时执行reverse delete到位。例如,要仅从上面的
data2
中提取0th和2nd行,可以使用:灵丹妙药:嵌套数据的^{}
除了上述方法之外,还有一个强大的替代方法是
json_normalize
函数,它可以处理字典(记录)列表,此外还可以处理嵌套字典。同样,请记住,传递给
json_normalize
的数据必须是字典(记录)格式的列表。如前所述,
json_normalize
还可以处理嵌套字典。以下是从文档中获取的示例。有关
meta
和record_path
参数的更多信息,请参阅文档。总结
下面是上面讨论的所有方法的表,以及支持的特性/功能。
*使用
orient='columns'
,然后转置以获得与orient='index'
相同的效果。在pandas 16.2中,我必须做
pd.DataFrame.from_records(d)
才能让这个工作。假设
d
是你的口述清单,简单地说:相关问题 更多 >
编程相关推荐