对 pandas 数据帧使用 to_excel(...) 函数时,如何区分空字符串 np.nan 和 None?

How to separate between empty string, np.nan and None when using to_excel(...) function for pandas dataframe?

构建包含 np.nanNone 和空字符串 ('') 值的数据框 df 后 Python 3.8.3 和 Pandas 1.0.4

import pandas as pd
import numpy as np

df1 = pd.DataFrame({'b':None,'c':''},index=[0])
df2 = pd.DataFrame({'a':1,'b':1,'c':None},index=[0])
df = pd.concat([df1,df2], axis=0, sort=True)
print(df)

数据框df看起来像

     a     b     c
0  NaN  None      
0  1.0     1  None

现在我想使用 to_excel() 函数将值存储到 Excel。但是,在 运行 命令之后

df.to_excel('nan_none_empty.xlsx')

结果看起来像

np.nanNone 和空字符串 ('') 不可分离。

可以使用选项 na_rep 将空字符串 ('') 与 np.nanNone 分开,如下所示

df.to_excel('nan_none_empty2.xlsx',na_rep='?')

给出结果

但似乎,对于这个问题,我 运行 在 options for to_excel(...) function 之外,以便能够在 Excel 导出。

在将 df 导出到 Excel 时,如何将 np.nanNone 整齐地分开?

如果您想区分不同的 null 类型,最好的办法是在 导出到 Excel 之前替换值 。转换为字符串是确保您不会混淆 None、np.NaN、pd.NaT 等的一种方法...

df1 = pd.DataFrame({'b':None,'c':''},index=[0])
df2 = pd.DataFrame({'a':1,'b':1,'c':None},index=[0])
df = pd.concat([df1,df2], axis=0, sort=True)

null_map = {'nan': '-',
            'None': '?'} # Add the string representation for other types you may need

df = df.applymap(lambda x:
                 null_map[str(x)]
                 if str(x) in null_map
                 else x)
df.to_excel('nan_none_empty2.xlsx')

这样的怎么样?:

df = df.applymap(lambda x: str(x) if x in [None, ''] else x)
df.to_excel('nan_none_empty.xlsx',na_rep='np.nan')