How would I change the following code to handle NaN values as just empty cells within my dataframe as I iterate through it line by line outputting values in column 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'])
We can replace NaN values with 0 to get rid of NaN values. This is done by using fillna() function. This function will check the NaN values in the dataframe columns and fill the given value.
I would recommend copying the dataframe, changing the NANs to spaces and then writing the data. Your original dataframe will still have the NANs.
Also, as a workaround Xlsxwriter supports writing writing NANs mapped to formulas that yield an error code. However, this is a constructor option and isn't on by default. See the docs.
If you have a version of Pandas >= 0.16 you should be able to turn on the option as follows:
excel = pd.ExcelWriter(f_name,
engine='xlsxwriter',
options={'nan_inf_to_errors': True})
I think you can use fillna
:
df = df.fillna(0)
or:
df['A'] = df['A'].fillna(0)
But better is use 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)
If you want omit index and header, add parameters index=False
and header=False
:
df1.to_excel(writer, sheet_name='PnL', na_rep=0, index=False, header=False)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With