将ndarry添加为pandas列

时间:2017-09-28 20:29:27

标签: python pandas

我正在尝试创建一个包含一列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

1 个答案:

答案 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'>