将数组添加到pandas数据帧

时间:2018-04-18 11:17:40

标签: python pandas

我有一个数据框,我想创建一个新列并向此新列的每一行添加数组。我知道这样做我必须将列的数据类型更改为' object'我尝试了以下但是没有工作,

import pandas
import numpy as np

df = pandas.DataFrame({'a':[1,2,3,4]})
df['b'] = np.nan
df['b'] = df['b'].astype(object)
df.loc[0,'b'] = [[1,2,4,5]]

错误是

ValueError: Must have equal len keys and value when setting with an ndarray

但是,如果我将整个数据框的数据类型转换为' object':

df = pandas.DataFrame({'a':[1,2,3,4]})
df['b'] = np.nan
df = df.astype(object)
df.loc[0,'b'] = [[1,2,4,5]] 

所以我的问题是:为什么我必须更改整个DataFrame的数据类型?

1 个答案:

答案 0 :(得分:3)

试试这个:

In [12]: df.at[0,'b'] = [1,2,4,5]

In [13]: df
Out[13]:
   a             b
0  1  [1, 2, 4, 5]
1  2           NaN
2  3           NaN
3  4           NaN

请注意,只要在任何单元格中放入非标量值,相应列的dtype就会更改为object,以便能够包含非标量值:

In [14]: df.dtypes
Out[14]:
a     int64
b    object
dtype: object

PPS通常将非标量值存储在单元格中是一个坏主意,因为绝大多数Pandas / Numpy方法无法正常使用这些数据。