Обрабатывать Nan при использовании Pandas ExcelWriter в Python

Как бы я изменил следующий код для обработки значений NaN как просто пустых ячеек в моем фрейме данных, пока я буду перебирать его построчно, выводя значения в столбце A?

excel = pd.ExcelWriter(f_name,engine='xlsxwriter')
wb = excel.book
ws = wb.add_worksheet('PnL')

for i in len(df):
  ws.write(0,i,df.iloc[i]['A'])

2 ответа

Решение

Я думаю, что вы можете использовать fillna:

df = df.fillna(0)

или же:

df['A'] = df['A'].fillna(0)

Но лучше использовать to_excel:

import pandas as pd
import numpy as np

# Create a Pandas dataframe from the data.
df = pd.DataFrame({'A': [10, 20, 30, 20, 15, 30, 45, np.nan], 
                   'B': [10, 20, 30, 20, 15, 30, 45, np.nan]})
print df
    A   B
0  10  10
1  20  20
2  30  30
3  20  20
4  15  15
5  30  30
6  45  45
7 NaN NaN

#create subset, because cannot write Series to excel
df1 = df[['A']]

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('f_name.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object, instead NaN give 0
df1.to_excel(writer, sheet_name='PnL', na_rep=0)

Если вы хотите опустить индекс и заголовок, добавьте параметры index=False а также header=False:

df1.to_excel(writer, sheet_name='PnL', na_rep=0, index=False, header=False)

превосходить

Я бы порекомендовал скопировать фрейм данных, изменить NAN на пробелы, а затем записать данные. Ваш исходный фрейм данных будет по-прежнему иметь NAN.

Кроме того, в качестве обходного пути Xlsxwriter поддерживает запись написания NAN, сопоставленных с формулами, которые дают код ошибки. Однако это опция конструктора, которая по умолчанию не включена. Смотрите документы.

Если у вас есть версия Pandas >= 0.16, вы сможете включить эту опцию следующим образом:

excel = pd.ExcelWriter(f_name,
                        engine='xlsxwriter',
                        options={'nan_inf_to_errors': True})
Другие вопросы по тегам