Во-первых, ваш метод создает файл, который содержит начальные нули, как вы и ожидаете. Я восстановил этот минимальный рабочий пример из вашего описания, и он прекрасно работает:
import pandas
import re
df = pandas.DataFrame([["14-05-2019"],
["03-05-2019"],
["11-05-2019"],
["09-05-2019"],
["08-08-2019"],
["25-05-2019"]], columns=['Date'])
for idx in df.index:
df.at[idx, 'Date'] = re.sub('\-', '', df.at[idx, 'Date'])
df['Date'] = df['Date'].apply(lambda x: '{0:0>8}'.format(x))
df.to_csv(path_or_buf="report.csv", header=True, index=False, sep=';')
На данный момент report.csv
содержит это (с ведущими нулями, как вы хотели).
Date
14052019
03052019
11052019
09052019
08082019
25052019
Теперь о том, почему вы думали, что это не работает. Если вы в основном находитесь в Pandas, вы можете помешать ему угадать тип вывода, указав dtype в read_csv
:
df_readback = pandas.read_csv('report.csv', dtype={'Date': str})
Date
0 14052019
1 03052019
2 11052019
3 09052019
4 08082019
5 25052019
Возможно, вы читаете это в Excel (я полагаю, это из-за того, что вы используете ;
разделители). К сожалению, нет способа гарантировать, что Excel правильно читает это поле при двойном щелчке, но если это ваша конечная цель, вы можете увидеть, как правильно настроить файл для Excel, чтобы правильно прочитать в этот ответ .