我有一个数据框,我想创建一个新列并向该新列的每一行添加数组。我知道要这样做我必须将列的数据类型更改为“对象”我尝试了以下但它不起作用,
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
但是,如果我将整个数据帧的数据类型转换为“对象”,它就会起作用:
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 的数据类型?
最佳答案
试试这个:
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
PS 请注意,一旦您将非标量值放入任何单元格 - 相应列的 dtype 将更改为 object
以便能够包含非标量值:
In [14]: df.dtypes
Out[14]:
a int64
b object
dtype: object
PPS 通常,在单元格中存储非标量值是个坏主意,因为绝大多数 Pandas/Numpy 方法都无法正确处理此类数据。
关于python - 将数组添加到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49898379/