python - 将字典的numpy ndarray转换为DataFrame
问题描述
我已经在 stackoverflow 中搜索了解决方案 -> 但所有解决方案都与我的需求略有不同。
我有一个大的 ndarray(大约 1.07 亿行)让我们称之为df
:
[{'A': 5, 'C': 3, 'D': 3},
{'A': 7, 'B': 9, 'F': 5},
{'B': 4, 'C': 7, 'E': 6}]
我需要尽可能高效地将其转换为 DataFrame。这是一个示例所需的输出:
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) 相同的输出。它输出一个 DataFrame,其中包含一列,每一行都有字典。
解决方案
我认为输入数据不同:
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 不同的评论中的解决方案:
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
推荐阅读
- angular - Angular - 如何从一个输入跳到另一个?
- python - 在ndarray python中将数据添加到新创建的轴
- php - 关于 PHP 中的 strpos
- excel - 将集合添加为 excel 验证
- python-3.x - 在 seaborn 联合图上设置边缘颜色
- reactjs - React 中 Forge 查看器的最小实现
- php - PHP-FPM 错误 - 不断收到“致命错误:允许的内存大小为 268435456 字节已用尽(尝试分配 107374182448 字节)”
- ember.js - Ember cli 分页 - 无法接收模型?
- python - 在向量场上变换一个 numpy 矩阵
- javascript - 使用 JSON.stringify 将所有内容存储在 localstorage 上