我尝试使用xlsxwriter将DataFrame写入Excel文件,并且遇到NaN值未正确填充的问题。
无论我在编写器上使用df.fillna
,df.replace
还是na_rep
选项,都会在DataFrame中保留一些NaN值。
使用pdb.set_trace()
调查,我发现了以下内容:
(Pdb) df['col_name'][0]
Decimal('NaN')
(Pdb) Decimal(np.nan)
Decimal('NaN')
(Pdb) df['col_name'][0]==Decimal(np.nan)
False
(Pdb) na=df['col_name'][0]
(Pdb) na
Decimal('NaN')
(Pdb) na==df['col_name'][0]
False
(Pdb) df['col_name'][0]
Decimal('NaN')
如果我无法定义这些值,我怎样才能识别这些值?
答案 0 :(得分:2)
如果Decimal
格式对您不重要,您可以重新制作为float
。
如果Decimal
格式 对您很重要,那么pandas
不是理想的选择,因为它不像numpy
数组那样可以向量化。< / p>
import pandas as pd, numpy as np
from decimal import Decimal
s = pd.Series([Decimal(np.nan), Decimal(5.1)])
test = s.isnull().tolist() # [False, False]
s = s.astype(float)
test = s.isnull().tolist() # [True, False]
答案 1 :(得分:1)
You cannot use ==
to check for NaN
。您应该使用np.isnan()
。
答案 2 :(得分:1)
只需使用以下函数:
def pandas_replace_decimal_by_value(df, column, value):
idx = df[column].apply(math.isnan)
df.loc[idx, column] = value