Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字典的numpy数据数组转换为数据帧_Python_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 将字典的numpy数据数组转换为数据帧

Python 将字典的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.

我在stackoverflow中搜索了此->的解决方案,但所有解决方案都与我的需求略有不同

我有一个很大的数组(大约1.07亿行),我们称它为df
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米行的熊猫通常可以关闭任何个人计算机。在该解决方案中,输出列不排序。