合并DataFrame后无法将NaN替换为None的问题求助
Pandas左连接后NaN替换为None的解决方案
你遇到的问题核心是两点:一是Pandas数值类型列无法直接存储None,会自动转成NaN;二是你调用replace时没对结果赋值,也没启用inplace=True,导致原数据没被修改。
正确解决方法
方法一:先转列类型再替换
import pandas as pd import numpy as np df1 = pd.DataFrame({'a': ['foo', 'bar'], 'b': [1, 2]}) df2 = pd.DataFrame({'a': ['foo', 'baz'], 'c': [3, 4]}) final_df = df1.merge(df2, how='left', on='a') # 将需要替换的列转为object类型(支持存None) final_df['c'] = final_df['c'].astype(object) # 替换NaN为None,同时启用inplace修改原数据 final_df.replace(np.NaN, None, inplace=True) print(final_df)
方法二:使用fillna指定value=None
final_df = df1.merge(df2, how='left', on='a') # 转类型+填充一步完成 final_df['c'] = final_df['c'].astype(object).fillna(value=None)
关键说明
- 数值类型列(int/float)不支持存储
None,Pandas会自动把None转成NaN,所以必须先将列转为object类型。 - Pandas的大多数方法默认返回数据副本,不会修改原数据,要么用
inplace=True,要么把结果赋值给新变量。
内容的提问来源于stack exchange,提问作者Vyshnavi
相关产品推荐
相关产品推荐

