Я хочу сохранить X (ndarray) с размерами (3960, 225) в файле Excel (.xlsx). В 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 (отсутствующих). Есть ли простой способ справиться с этой ошибкой?
Вы можете использовать fillna метод панд.
df.fillna(0)
заменит все NaN
на 0.0
Я заполнил non, используя следующий код:
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
@Nick, вы можете изменить тип данных на строку (str). Тогда пиши в столбцы
Заполнение значений NaN значением «Нет» — лучший вариант, чем 0, если вы хотите, чтобы эти ячейки оставались пустыми в Excel.
df.replace(np.nan, None)
Для версий pandas < 1.4.0 вам нужно будет использовать df.replace({np.nan: None})
для такой операции замены.
Это не сработало для меня
Лучший способ сделать это — заменить все значения NaN на None.
df = df.where(df.notnull(), None)
Есть ли способ сделать это без пропуска? Я все еще хочу написать все в колонке, которая не пуста