2016-02-24 75 views
4

如何將以下代碼更改爲將NaN值作爲數據框中的空單元格處理,因爲我在列A中逐行輸入值進行迭代?在python中使用Pandas ExcelWriter時處理Nan

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 = 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=Falseheader=False

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

excel

+0

它是如何工作的? – jezrael

1

我會建議複製數據框,改變的NaN到空間,然後寫入數據。您的原始數據框仍將具有NAN。

另外,作爲一種解決方法,Xlsxwriter支持將寫入NANs映射到產生錯誤代碼的公式。但是,這是一個構造函數選項,默認情況下不啓用。請參閱docs

如果你有一個版本的熊貓> = 0.16,你應該可以打開相應的選項,如下所示:

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

如果數據中存在某個nan值,則會出現此錯誤:TypeError:在沒有「nan_inf_to_errors」Workbook()選項的write_number()中不支持NAN/INF。我使用options = {'nan_inf_to_errors':True},並且工作得很好。 –