首页 > 解决方案 > 将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       |

标签: pythonarrayspandasdataframenumpy

解决方案


创建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)

推荐阅读