如何修改Pandas可空整数类型的空值打印显示效果?
问题原因
你遇到的是Pandas 1.2.4及更早版本的已知缺陷:DataFrame.to_string()的na_rep参数当时仅支持传统浮点类型的NaN空值自定义,对可空整数、可空布尔这类扩展数据类型(以pd.开头的dtype)的pd.NA空值不生效,才会固定输出<NA>。
解决方案
方案1:不升级版本,临时替换空值打印
打印前先将所有pd.NA替换为你需要的空值占位符即可,不会修改原DataFrame的内容,示例修改代码如下:
import pandas as pd print(f"\nPandas version = {pd.__version__}") index = list("abcd") columns = list("efghjk") df1 = pd.DataFrame(index=index, columns=columns) df2 = pd.DataFrame(index=index, columns=columns, dtype=pd.Int32Dtype()) for df in (df1, df2): df.at["c", "h"] = 7 # 写入非空测试值 # 新增pd.NA替换逻辑,空值统一替换为空白 print("\n", df.replace(pd.NA, "").to_string(na_rep=""))
如果需要频繁调用可以封装成通用方法:
def custom_df_to_string(df, na_rep="", **to_string_kwargs): return df.replace(pd.NA, na_rep).to_string(**to_string_kwargs)
方案2:升级Pandas版本
这个缺陷已经在Pandas 1.4.0及后续版本修复,升级后你原本的代码不需要做任何修改,na_rep参数就可以正常作用于可空整数类型的空值,直接输出你期望的空白效果。
内容的提问来源于stack exchange,提问作者John Ladasky
相关产品推荐
相关产品推荐

