python - 将numpy数组转换为数据框(大量列)
问题描述
如何将 numpy 数组转换为 pandas 数据框。为简单起见,该数组仅包含 5 个值。在实践中还有更多。
import numpy as np
import pandas as pd
nparray1 = np.array([1,2,3,4,5])
nparray2 = np.array([2,2,2,6,6])
我想从 nparray1 中获取以下数据帧结构:
| column1 | column2 | column3 | column4 | column5 |
|---------|---------|---------|---------|---------|
| 1 | 2 | 3 | 4 | 5 |
| | | | | |
在下一步中,我想将 nparray2 附加到数据框:
| column1 | column2 | column3 | column4 | column5 |
|---------|---------|---------|---------|---------|
| 1 | 2 | 3 | 4 | 5 |
| 2 | 2 | 2 | 6 | 6 |
解决方案
创建DataFrame
一个然后追加DataFrame.loc
:
nparray1 = np.array([1,2,3,4,5])
nparray2 = np.array([2,2,2,6,6])
df = pd.DataFrame([nparray1])
print (df)
0 1 2 3 4
0 1 2 3 4 5
df.loc[len(df)] = nparray2
print (df)
0 1 2 3 4
0 1 2 3 4 5
1 2 2 2 6 6
或者:
df = pd.DataFrame([nparray1, nparray2])
print (df)
0 1 2 3 4
0 1 2 3 4 5
1 2 2 2 6 6
编辑:
如果性能很重要,请创建二维数组:
np.random.seed(2021)
n_arrays = 100
n_columns = 10000
arrays = [
np.random.randint(0, 10, size=n_columns)
for n in range(n_arrays)
]
In [41]: %timeit df = pd.DataFrame(arrays)
919 ms ± 40 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [42]: %timeit df = pd.DataFrame(np.array(arrays))
2.39 ms ± 86.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
另一种解决方案:
In [43]: %timeit df = pd.DataFrame({row_index: row_array for row_index, row_array in enumerate(arrays)}).T
7.16 ms ± 340 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
推荐阅读
- python - 如何在 for 循环中生成热图?
- php - 使用 php/mysqli 的数据提取问题
- python - Pandas:在 CSV 中查找每下 10 个数据点的平均值
- flutter - Flutter 包 widgets.dart、material.dart 和 cupertino.dart 有什么区别,使用哪一个?
- javascript - 等待设备并响应网页
- java - 如何将条目添加到 CalendarFX MonthPage?
- javascript - 更新 mobx 存储时重新渲染组件
- python - 将 Rawsql 查询数组转换为格式化的 html 表
- javascript - 练习反应式编程
- php - 从正则表达式中得到错误“在偏移量 1 处没有重复的内容”