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

使用pandas .assign()创建字符串标量列时遇全NaN问题

解决pandas .assign()赋值字符串标量返回全NaN的问题

问题原因

在部分早期pandas版本中,直接向.assign()传递字符串标量时,pandas无法正确将其广播为与DataFrame行数匹配的列,因此生成全NaN的列;即使使用lambda包装字符串标量,旧版本也可能存在相同的广播逻辑问题,导致结果仍为NaN。而直接通过df['col'] = 标量的方式赋值时,pandas的广播逻辑会自动适配所有行,所以能正常生成全为目标字符串的列。

解决方案

针对这个问题,有几种可行的解决方式:

  1. 用pd.Series包装标量并指定索引
    将字符串标量包装为与原DataFrame索引一致的Series,确保行数匹配:

    import pandas as pd
    str_scalar = "Hello"
    df = df.assign(str_scalar_col=pd.Series(str_scalar, index=df.index))
    
  2. 在lambda中生成对应长度的重复字符串列表
    通过lambda获取原DataFrame的行数,生成对应长度的字符串列表:

    str_scalar = "Hello"
    df = df.assign(str_scalar_col=lambda x: [str_scalar] * len(x))
    
  3. 升级pandas到新版本
    如果使用pandas 1.0及以上版本,直接传递字符串标量即可正常工作,pandas会自动处理广播:

    str_scalar = "Hello"
    df = df.assign(str_scalar_col=str_scalar)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:50:06