2016-02-24 5 views
4

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

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']) 
+0

Может быть, попробовать 'ДФ = df.fillna («»)' – jezrael

+0

Я хотел бы сохраняйте значения в df, если возможно – Mike

+1

также добавить ... это не сработало – Mike

ответ

4

Я думаю, что вы можете использовать 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) 

excel

+0

Как это работает? – jezrael

1

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

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

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

excel = pd.ExcelWriter(f_name, 
         engine='xlsxwriter', 
         options={'nan_inf_to_errors': True}) 
+0

Если в данных есть какое-то значение nan, вы получили эту ошибку: TypeError: NAN/INF не поддерживается в write_number() без опции «nan_inf_to_errors» Workbook(). Я использую опции = {'nan_inf_to_errors': True} и работает очень хорошо. –

Смежные вопросы