如何將以下代碼更改爲將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'])
如何將以下代碼更改爲將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'])
我認爲你可以使用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)
它是如何工作的? – jezrael
我會建議複製數據框,改變的NaN到空間,然後寫入數據。您的原始數據框仍將具有NAN。
另外,作爲一種解決方法,Xlsxwriter支持將寫入NANs映射到產生錯誤代碼的公式。但是,這是一個構造函數選項,默認情況下不啓用。請參閱docs。
如果你有一個版本的熊貓> = 0.16,你應該可以打開相應的選項,如下所示:
excel = pd.ExcelWriter(f_name,
engine='xlsxwriter',
options={'nan_inf_to_errors': True})
如果數據中存在某個nan值,則會出現此錯誤:TypeError:在沒有「nan_inf_to_errors」Workbook()選項的write_number()中不支持NAN/INF。我使用options = {'nan_inf_to_errors':True},並且工作得很好。 –
也許嘗試'DF = df.fillna(「」)' – jezrael
我想如果可能的話,在df中保留值 – Mike
也可以添加...它不起作用 – Mike