我有一个数据框,我想创建一个新列并向此新列的每一行添加数组。我知道这样做我必须将列的数据类型更改为' 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的数据类型?
答案 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方法无法正常使用这些数据。