我正在尝试创建一个包含一列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
答案 0 :(得分:3)
IIUC:
有几种方法可以做到这一点。您可以通过传递 list
数组来完成此操作。
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'>