You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas fillna传入numpy数组触发Invalid fill value报错

报错产生原因
  • fillna方法的value参数仅支持传入标量、字典、Series、DataFrame类型的填充值,不支持直接传入numpy ndarray数组。你代码里np.where(df['d'].str['c'] == "C", "Y", "N")返回的是一维numpy数组,类型不符合参数要求,因此直接触发类型报错。
  • 原写法逻辑也存在偏差:你构造的填充值是和行数等长的一维序列,直接传给整个DataFrame的fillna时,pandas无法识别这个序列要按行匹配填充哪一列的空值,且d列存储的是字典/空值,本身也不需要用"Y"/"N"字符串填充。
正确修改方案

你的预期逻辑是:根据同一行d列字典中c字段的值,填充c列的空值——当d列字典的c字段等于"C"时填"Y",否则填"N",d列原有空值保留。
实现代码如下(注意原构造代码缺失numpy导入,已补全):

import pandas as pd
import numpy as np

df = pd.DataFrame({
                   'c': [np.nan, 'N', np.nan, 'N'],
                   'd': [{'c':'C'}, np.nan, {'c':'C'}, np.nan]
                 })

# 仅针对c列填充,将np.where结果转为和原表索引对齐的Series传入fillna
df['c'] = df['c'].fillna(
    pd.Series(np.where(df['d'].str['c'] == "C", "Y", "N"), index=df.index)
)

执行后得到的DataFrame结果如下:

索引cd
0Y{'c': 'C'}
1NNaN
2Y{'c': 'C'}
3NNaN

修改点说明:

  • 仅对需要填充空值的c列调用fillna,避免误修改d列的原始数据
  • 将numpy数组转为与原DataFrame索引一致的Series,既符合fillna的参数类型要求,也能保证填充值和行号一一对应,不会出现填充错位。

内容的提问来源于stack exchange,提问作者kms

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:18:22