Pandas新增字符串列出现NaN,赋值顺序不同结果不一致原因咨询
问题原因
这个现象的核心是Pandas的索引对齐规则和空DataFrame的赋值逻辑:
- 空DataFrame(0行0列)直接赋值标量作为列时,因为当前没有任何行数据,Pandas不会自动生成行,只会新增列名,整个DataFrame还是0行结构。
- 第一种写法的执行顺序问题:
- 先执行
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。
- 第二种写法则避开了这个问题:
- 先赋值
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
相关产品推荐
相关产品推荐

