由于非浮动NaN值而导致DataFrame中的NaN无法正常工作

时间:2018-03-13 11:47:34

标签: python pandas dataframe

我尝试使用xlsxwriter将DataFrame写入Excel文件,并且遇到NaN值未正确填充的问题。

无论我在编写器上使用df.fillnadf.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')

如果我无法定义这些值,我怎样才能识别这些值?

3 个答案:

答案 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