用空值替换 Python Pandas 中的 NaN

4

我正在尝试从pandas数据框写入到AWS Redshift:

df_tmp_rpt = pd.read_csv('path')
df_tmp_rpt = df_tmp_rpt[df_tmp_rpt['COL'] == 'VALUE']
df_tmp_rpt = df_tmp_rpt.replace(np.nan, null, regex=True)
records = df_tmp_rpt.to_records(index=False)
for record in records:
     script_insert = ScriptReader.get_script(SCRIPT_PATH).format(record)
     RedshiftDataManager.run_update(script_insert, DB_CONNECTION)

Redshift期望使用格式 ('value1','value2',null) 来插入数据。因此,我尝试将DataFrame中的所有NaN替换为null。我该如何实现?(我需要一个null值而不是字符串'null')

提前感谢您的帮助。


2
这个回答解决了你的问题吗?Pandas dataframe fillna() 只在部分列中原地填充 - sushanth
@Sushanth 我确实看到了这个话题,但它并不是我需要的。我需要将所有NaN值替换为null,而不是'None'或'0'。 - PyPy2000
2个回答

4

这是对我有效的方法。

df_tmp_rpt = df_tmp_rpt.where(df_tmp_rpt.notna(), None)

这将把数据框中所有的NaN值替换为None。在数据库中,None被加载为NULL。此方法适用于MS SQL。


1

谢谢您的澄清。这意味着我必须为我的问题找到不同的解决方案,因为整数字段期望 null 而不是空字符串。 - PyPy2000
我相信在Redshift中传递空字符串会被解释为null。 - dkreeft
这也是我想的。之后,我收到一个错误提示说“”不能输入到整数字段中。错误信息为:无效的整数输入语法:"" - PyPy2000
我看到了,亚马逊的文档不一致。在这里,我看到确实“''”不等于null。我将使用None更新我的答案,我相信那会起作用。 - dkreeft
抱歉,我应该给您提供那份文档。在我的代码中,我应该在哪里将 NaN 值更改为 None?运行:df_tmp_rpt.replace(np.nan, None, inplace=True) 的结果与不进行任何更改时相同。 - PyPy2000
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接