使用pandas .assign()创建字符串标量列时遇全NaN问题
解决pandas .assign()赋值字符串标量返回全NaN的问题
问题原因
在部分早期pandas版本中,直接向.assign()传递字符串标量时,pandas无法正确将其广播为与DataFrame行数匹配的列,因此生成全NaN的列;即使使用lambda包装字符串标量,旧版本也可能存在相同的广播逻辑问题,导致结果仍为NaN。而直接通过df['col'] = 标量的方式赋值时,pandas的广播逻辑会自动适配所有行,所以能正常生成全为目标字符串的列。
解决方案
针对这个问题,有几种可行的解决方式:
用pd.Series包装标量并指定索引
将字符串标量包装为与原DataFrame索引一致的Series,确保行数匹配:import pandas as pd str_scalar = "Hello" df = df.assign(str_scalar_col=pd.Series(str_scalar, index=df.index))在lambda中生成对应长度的重复字符串列表
通过lambda获取原DataFrame的行数,生成对应长度的字符串列表:str_scalar = "Hello" df = df.assign(str_scalar_col=lambda x: [str_scalar] * len(x))升级pandas到新版本
如果使用pandas 1.0及以上版本,直接传递字符串标量即可正常工作,pandas会自动处理广播:str_scalar = "Hello" df = df.assign(str_scalar_col=str_scalar)
内容的提问来源于stack exchange,提问作者user27009853
相关产品推荐
相关产品推荐

