Мой опыт относительно pd.read_csv показывает, что:
- По умолчанию конвертируются только столбцы, конвертируемые в int или float к соответствующим типам.
- Строки, похожие на дату, по-прежнему читаются как строки (тип столбца в результирующем DataFrame на самом деле объект ).
Если вы хотите, чтобы read_csv преобразовал такой столбец в тип datetime , вы должны передать параметр parse_dates , указав список столбцов, которые нужно проанализировать как даты. Поскольку вы этого не делали, ни один исходный столбец не должен преобразовываться в тип datetime .
Чтобы проверить эту деталь, после того, как вы прочитаете файл , запустите file.info()
и проверьте тип рассматриваемого столбца.
Итак, если соответствующий столбец файла Excel имеет тип Date , то, вероятно, это преобразование вызвано to_excel .
И еще одно замечание относительно имен переменных: то, что вы прочитали с помощью read_csv , - это DataFrame , а не файл . Фактический файл - это объект источник , из которого вы читаете содержимое, но здесь вы передали только файл имя .
Так что не используйте имена вроде file , чтобы назвать получившийся DataFrame, так как это вводит в заблуждение. Намного лучше использовать, например, df .
Редактировать после комментария от 05: 58Z
Чтобы полностью проверить то, что вы написали в своем комментарии, я создал следующий файл CSV:
DateBougth,Id,Value
2020/7/12,1031,500.15
2020/8/18,1032,700.40
2020/10/16,1033,452.17
Я запустил: df = pd.read_csv('Input.csv')
, а затем print(df)
, получив:
DateBougth Id Value
0 2020/7/12 1031 500.15
1 2020/8/18 1032 700.40
2 2020/10/16 1033 452.17
Итак, на Pandas уровень, преобразование формата не произошло в столбце DateBougth . Оба оставшихся столбца содержат содержимое numeri c, поэтому они были автоматически преобразованы в int64 и float64 , но DateBought осталось как object .
Затем я сохранил этот df в файл Excel, запустил: df.to_excel('Output.xls')
и открыл его в Excel. Содержимое:
введите описание изображения здесь
Таким образом, ни на уровне Excel преобразование типов данных не происходило.
Чтобы увидеть фактический тип данных ячейки B2 (первый DateBougth ), я щелкнул по этой ячейке и нажал Ctrl-1 , чтобы отобразить форматирование ячейки. Формат: Общий (а не Дата ), как я и ожидал.
Может быть, у вас устаревшая версия программного обеспечения? Я использую Python v. 3.8.2 и Pandas v. 1.0.3.
Еще одна деталь, которую нужно проверить: посмотрите на свой код после pd.read_csv . Может, где-то вы положили инструкцию типа df.DateBought = pd.to_datetime (df.DateBought) (явное преобразование типов)? Или хотя бы преобразование формата. Обратите внимание, что в моей среде не было абсолютно никаких изменений в формате столбца DateBought .