python - 将数组添加到 Pandas 数据框

标签 python pandas

我有一个数据框,我想创建一个新列并向该新列的每一行添加数组。我知道要这样做我必须将列的数据类型更改为“对象”我尝试了以下但它不起作用,

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/

相关文章:

python - Flask SQLAlchemy 枚举字段默认值

基于短路的Python输入

javascript - 在 django 中向 TinyMCE 添加外部插件

python - 无法将输入转换为时间戳、bday_range(...) - Pandas/Python

python - Matplotlib/Pandas 中条形图的优化

python - 词频分析-TypeError : '>=' not supported between instances of 'list' and 'int'

python - 检索 Django 中不同用户创建的模型对象

python - 使用 python 从配置单元读取数据时出现性能问题

postgresql - 在用 pandas 导出到 csv 的数据中发现文字换行符/回车符

python - 使用索引编辑 pandas DataFrame