Преобразование файла Excel в csv с использованием to_csv удаляет начальные нули, даже если ячейки отформатированы как строка

#python-3.x #pandas #csv

#python-3.x #pandas #csv

Вопрос:

Когда я пытаюсь преобразовать свой файл Excel в csv, используя функцию to_csv, весь мой номер элемента, который имеет 1, ведущий к 0, теряет его, за исключением самой первой строки.

У меня есть простой forloop, который перебирает все ячейки и преобразует значения ячеек в строку, поэтому я понятия не имею, почему только первая строка правильно преобразуется в формат csv с начальным 0.

 for row in ws.iter_rows():
    for cell in row:
        cell.value = str(cell.value)

pd.read_excel('example.xlsx').to_csv('result.csv', index=False, line_terminator = ',n')
  

например
https://i.stack.imgur.com/Njb3n.png (не позволяет мне напрямую добавлять изображение, но оно показывает следующее в Excel)

 0100,03/21/2019,4:00,6:00
0101,03/21/2019,4:00,6:00
0102,03/21/2019,4:00,8:00
  

превращается в:

 0100,03/21/2019,4:00,6:00,
101,03/21/2019,4:00,6:00,
102,03/21/2019,4:00,8:00,
  

Что я могу сделать, чтобы перед всеми первыми элементами в csv стояло 0?

Любая информация была бы оценена.

Ответ №1:

Итак, если у вас нет заголовка в файле Excel: имя столбцов по умолчанию равно 0,1, … и так далее

если вы хотите сохранить ноль, например, в столбце 0, просто сделайте:

 pd.read_excel('example.xlsx', header=None, dtype={0:str})
  .to_csv('result.csv', index=False, line_terminator = ',n'
  

если у вас нет заголовка и вы не указываете точное значение header = None, первой строкой является заголовок. dtype={0:str} указывает, что столбец 0 будет str.

будьте осторожны, когда вы сохраняете файл Excel в csv, заголовок сохраняется (здесь с вашими параметрами), первая строка будет равна 0,1, .. (название столбцов)

если вы не хотите, чтобы заголовок файла csv использовался:

 pd.read_excel('e:/test.xlsx', header=None, dtype={0:str})
  .to_csv('e:/result.csv', index=False, header=False, line_terminator = ',n')
  

Комментарии:

1. Я заметил, что у to_csv не было dtype в качестве одного из его параметров, и не думал о добавлении его в read_excel. Большое вам спасибо!