TypeError: NAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() option
TypeError: NAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() option
我想在 excel 文件 (.xlsx) 中保存尺寸为 (3960, 225) 的 X (ndarray)。在 X 中,我有一些缺失值 (nan)。我为它编写了一个代码。但是,我收到错误消息。
代码如下:
workbook = xlsxwriter.Workbook('arrays.xlsx')
worksheet = workbook.add_worksheet()
row = 0
for col, data in enumerate(X):
worksheet.write_column(row, col, data)
workbook.close()
df = pd.DataFrame(X)
## save to xlsx file
filepath = 'my_excel_file.xlsx'
df.to_excel(filepath, index=False)
这是回溯:
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pydev\pydevd.py", line 1448, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/Nafees Ahmed/PycharmProjects/Extra_Sensory_Experimetns/main.py", line 475, in <module>
worksheet.write_column(row, col, data)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 69, in cell_wrapper
return method(self, *args, **kwargs)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 1164, in write_column
error = self._write(row, col, token, cell_format)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 481, in _write
return self._write_number(row, col, *args)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 589, in _write_number
raise TypeError(
TypeError: NAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() option
可能是因为 nan(缺失)值。有什么简单的方法可以处理这个错误吗?
您可以使用 pandas 的 fillna 方法。
df.fillna(0)
将用 0.0
替换所有 NaN
我使用以下代码填充了非:
X[np.isnan(X)] = 0.;
用零填充 NaN
值并不能解决问题,如果您想将 NaN
值保持为 NaN
,您应该跳过这样的填充值:
row = 0
for col, data in enumerate(X):
try:
worksheet.write_column(row, col, data)
except:
pass
我想在 excel 文件 (.xlsx) 中保存尺寸为 (3960, 225) 的 X (ndarray)。在 X 中,我有一些缺失值 (nan)。我为它编写了一个代码。但是,我收到错误消息。
代码如下:
workbook = xlsxwriter.Workbook('arrays.xlsx')
worksheet = workbook.add_worksheet()
row = 0
for col, data in enumerate(X):
worksheet.write_column(row, col, data)
workbook.close()
df = pd.DataFrame(X)
## save to xlsx file
filepath = 'my_excel_file.xlsx'
df.to_excel(filepath, index=False)
这是回溯:
Traceback (most recent call last):
File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pydev\pydevd.py", line 1448, in _exec
pydev_imports.execfile(file, globals, locals) # execute the script
File "C:\Program Files\JetBrains\PyCharm 2020.2.1\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "C:/Users/Nafees Ahmed/PycharmProjects/Extra_Sensory_Experimetns/main.py", line 475, in <module>
worksheet.write_column(row, col, data)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 69, in cell_wrapper
return method(self, *args, **kwargs)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 1164, in write_column
error = self._write(row, col, token, cell_format)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 481, in _write
return self._write_number(row, col, *args)
File "C:\Users\Nafees Ahmed\AppData\Local\Programs\Python\Python38\lib\site-packages\xlsxwriter\worksheet.py", line 589, in _write_number
raise TypeError(
TypeError: NAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() option
可能是因为 nan(缺失)值。有什么简单的方法可以处理这个错误吗?
您可以使用 pandas 的 fillna 方法。
df.fillna(0)
将用 0.0
NaN
我使用以下代码填充了非:
X[np.isnan(X)] = 0.;
用零填充 NaN
值并不能解决问题,如果您想将 NaN
值保持为 NaN
,您应该跳过这样的填充值:
row = 0
for col, data in enumerate(X):
try:
worksheet.write_column(row, col, data)
except:
pass