Python 将字典的numpy数据数组转换为数据帧
我在stackoverflow中搜索了此->的解决方案,但所有解决方案都与我的需求略有不同 我有一个很大的数组(大约1.07亿行),我们称它为dfPython 将字典的numpy数据数组转换为数据帧,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我在stackoverflow中搜索了此->的解决方案,但所有解决方案都与我的需求略有不同 我有一个很大的数组(大约1.07亿行),我们称它为dfdf: [{'A': 5, 'C': 3, 'D': 3}, {'A': 7, 'B': 9, 'F': 5}, {'B': 4, 'C': 7, 'E': 6}] 我需要它转换成一个数据帧的时间尽可能有效。这是所需输出的示例: A B C D E F 0 5.0 NaN 3.
df
:
[{'A': 5, 'C': 3, 'D': 3},
{'A': 7, 'B': 9, 'F': 5},
{'B': 4, 'C': 7, 'E': 6}]
我需要它转换成一个数据帧的时间尽可能有效。这是所需输出的示例:
A B C D E F
0 5.0 NaN 3.0 3.0 NaN NaN
1 7.0 9.0 NaN NaN NaN 5.0
2 NaN 4.0 7.0 NaN 6.0 NaN
我已经尝试了pd.DataFrame(df)
和pd.DataFrame.from_dict(df)
,但是这些给了我输出:
0
0 {'A': 5, 'C': 3, 'D': 3}
1 {'A': 7, 'B': 9, 'F': 5}
2 {'B': 4, 'C': 7, 'E': 6}
问题:如何将df
转换为所需的输出
编辑:
我试过anky_91的解决方案。这将适用于列表,而不是ndarray。我希望避免转换为列表,因为列表中有1.07亿个值会导致内存错误
pd.DataFrame(df).sort_index(axis=1)
这仍然提供与pd.DataFrame(df)相同的输出。它输出一个包含一列的数据帧,每行有一个字典。我认为输入数据是不同的:
L = [[{'A': 5, 'C': 3, 'D': 3}],
[{'A': 7, 'B': 9, 'F': 5}],
[{'B': 4, 'C': 7, 'E': 6}]]
print (pd.DataFrame(L))
0
0 {'A': 5, 'C': 3, 'D': 3}
1 {'A': 7, 'B': 9, 'F': 5}
2 {'B': 4, 'C': 7, 'E': 6}
可能的解决方案是扁平化:
from itertools import chain
df = pd.DataFrame(chain.from_iterable(L)).sort_index(axis=1)
print (df)
A B C D E F
0 5.0 NaN 3.0 3.0 NaN NaN
1 7.0 9.0 NaN NaN NaN 5.0
2 NaN 4.0 7.0 NaN 6.0 NaN
如果输入数据为numpy数组,请使用@Code Different注释中的解决方案:
arr = np.array([{'A': 5, 'C': 3, 'D': 3},
{'A': 7, 'B': 9, 'F': 5},
{'B': 4, 'C': 7, 'E': 6}])
df = pd.DataFrame(arr.tolist()).sort_index(axis=1)
print (df)
A B C D E F
0 5.0 NaN 3.0 3.0 NaN NaN
1 7.0 9.0 NaN NaN NaN 5.0
2 NaN 4.0 7.0 NaN 6.0 NaN
我不明白这个问题:
pd.DataFrame(a).sort_index(axis=1)
工作正常,并与预期输出相匹配pd.DataFrame([d为arr中的d])
来自anky_91的测试解决方案-完全按照需要工作。非常优雅@anky[u请参见问题“编辑”部分下的编辑。我仍然收到与运行pd.DataFrame(df)
相同的输出。df是ndarray类型。如果df
(多奇怪的名称)是ndarray
,则pd。数据帧(df)
将不起作用。您可以将其转换为列表:pd.DataFrame(df.tolist())
。但是还没有测试性能。与上面anky_91中的输出列不同,具有100米行的熊猫通常可以关闭任何个人计算机。在该解决方案中,输出列不排序。