我有一个数据框,想要创建一个新列,并将数组添加到每一行的新列中。我知道需要将该列的数据类型更改为“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的数据类型?
.at
,为什么不用loc
呢? - iDrwish.at
和.iat
是为处理__单个__单元格而设计的,而.loc
和.iloc
则更加复杂,并具有更多用于对齐数据等逻辑。 - MaxU - stand with Ukraine.at
- 你不需要将整个DF转换为object
dtype - 参见我的答案中的df.dtypes
输出。关于“为什么在整个DF转换为object
dtype时df.loc[0,'b'] = [[...]]
能够工作” - 我不知道... - MaxU - stand with Ukraineat
和iat
(两者都很少使用)比基于.loc
的等效方法更高效,用于访问标量。 - jpp