引用一个dataframe的单元格值到另一个dataframe时出现NaN问题
Pandas写入单元格值返回NaN问题解决方案
常见原因及对应解决方法
- 索引不匹配
pandas赋值时默认会按索引对齐,若你写入的对象是带索引的Series、或目标DataFrame的索引和你指定的赋值位置不匹配,就会自动填充NaN。
解决:如果是给全列填充同一个余额值,直接传入标量赋值即可:target_df['余额'] = 你读取到的单个余额值
如果是给特定行赋值,用.loc显式指定行位置:target_df.loc[目标行的索引值, '余额'] = 你读取到的单个余额值 - 数据类型不兼容
如果读取到的余额值带千位分隔符、货币符号等特殊字符,或是字符串格式,而目标DataFrame的余额列预先被设置为数值类型,转换失败就会生成NaN。
解决:赋值前先清洗转换值的格式:
# 示例:处理带逗号和人民币符号的余额值 raw_balance = 你读取到的单元格内容 clean_balance = float(str(raw_balance).replace('¥','').replace(',','').strip()) # 再写入目标df target_df['余额'] = clean_balance
- 链式索引导致赋值失效
如果你用了df[过滤条件]['余额'] = xxx这类链式赋值写法,pandas可能操作的是原DataFrame的副本而非原对象,写入不会生效,查询时就会返回NaN。
解决:统一用.loc完成条件赋值:target_df.loc[target_df['交易日期'] == '2024-xx-xx', '余额'] = clean_balance
验证方法
赋值后先打印你清洗后的余额值、目标列的赋值结果,确认值没有问题:
print(clean_balance) print(target_df['余额'].head())
内容的提问来源于stack exchange,提问作者Chandra
相关产品推荐
相关产品推荐

