我正在尝试创建一个包含单列 numpy 数值数组的 pandas 数据框。
我尝试使用:
pd.DataFrame(np.ndarray([1 , 2]))
这会创建一个包含两列的 pandas 数据框。
我也尝试过使用:
pd.DataFrame({'test':np.ndarray([1 , 2])})
但返回错误:
/opt/conda/lib/python3.6/site-packages/pandas/core/frame.py in extract_index(data)
5631
5632 if not indexes and not raw_lengths:
-> 5633 raise ValueError('If using all scalar values, you must pass'
5634 ' an index')
5635
ValueError: If using all scalar values, you must pass an index
最佳答案
IIUC:
有多种方法可以做到这一点。您可以通过传递列表
数组来实现。
pd.DataFrame({'test':[np.array([1 , 2])]})
test
0 [1, 2]
列表列的简单概括
df = pd.Series(np.array([[1, 2], [3, 4]]).tolist()).to_frame('test')
df
test
0 [1, 2]
1 [3, 4]
以及np.array
列
df = pd.Series(np.array([[1, 2], [3, 4]]).tolist()).apply(np.array).to_frame('test')
df
test
0 [1, 2]
1 [3, 4]
或者你可以做更多。这将是一个 DataFrame,其中元素为 np.array
df = pd.Series(
[np.array(v) for v in np.random.randint(10, size=(10, 3)).tolist()]
).to_frame('test')
df
test
0 [3, 1, 5]
1 [8, 3, 7]
2 [1, 8, 6]
3 [3, 1, 7]
4 [6, 2, 7]
5 [1, 0, 8]
6 [8, 8, 0]
7 [6, 6, 7]
8 [4, 0, 9]
9 [5, 2, 1]
注意类型
df.applymap(type)
test
0 <class 'numpy.ndarray'>
1 <class 'numpy.ndarray'>
2 <class 'numpy.ndarray'>
3 <class 'numpy.ndarray'>
4 <class 'numpy.ndarray'>
5 <class 'numpy.ndarray'>
6 <class 'numpy.ndarray'>
7 <class 'numpy.ndarray'>
8 <class 'numpy.ndarray'>
9 <class 'numpy.ndarray'>
但是,我们也可以通过传递列表列表来跳过 np.array
。
df = pd.Series(np.random.randint(10, size=(10, 3)).tolist()).to_frame('test')
df
test
0 [3, 1, 5]
1 [8, 3, 7]
2 [1, 8, 6]
3 [3, 1, 7]
4 [6, 2, 7]
5 [1, 0, 8]
6 [8, 8, 0]
7 [6, 6, 7]
8 [4, 0, 9]
9 [5, 2, 1]
注意类型
df.applymap(type)
test
0 <class 'list'>
1 <class 'list'>
2 <class 'list'>
3 <class 'list'>
4 <class 'list'>
5 <class 'list'>
6 <class 'list'>
7 <class 'list'>
8 <class 'list'>
9 <class 'list'>
关于python - 将数组附加为 pandas 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477786/