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

Pandas新增字符串列出现NaN,赋值顺序不同结果不一致原因咨询

问题原因

这个现象的核心是Pandas的索引对齐规则和空DataFrame的赋值逻辑:

  1. 空DataFrame(0行0列)直接赋值标量作为列时,因为当前没有任何行数据,Pandas不会自动生成行,只会新增列名,整个DataFrame还是0行结构。
  2. 第一种写法的执行顺序问题:
  • 先执行all_per['id'] = person时,all_per是空df,赋值后仅新增id列名,仍为0行
  • 再执行all_per['name'] = 来自df的Series时,这个Series是有实际行的(你的示例里是1行,索引为0),Pandas会自动把all_per的行扩展到和该Series索引对齐,新增索引为0的行。这时候已经存在的id列没有对应索引0的数值,就会自动填充NaN。
  1. 第二种写法则避开了这个问题:
  • 先赋值name列,直接把all_per的结构变成和源df一致的N行1列结构
  • 再赋值id列的标量时,Pandas会自动把标量广播到所有已存在的行,所以能正常填充值。

更规范的写法建议

你当前的写法如果peopleList里有多个元素,会反复覆盖all_per的id和name列,最终只会保留最后一个person的结果,推荐改成批量生成的方式:

df = pandas.json_normalize(data)
res = []
for person in peopleList:
    full_name = df[f'results.(id:{person}).localizedFirstName'] + ' ' + df[f'results.(id:{person}).localizedLastName']
    res.append({'id': person, 'name': full_name.iloc[0]})
all_per = pandas.DataFrame(res)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:57:00