При преобразовании в CSV UTF-8 с Python мои столбцы даты превращаются в дату-время - PullRequest
0 голосов
/ 20 декабря 2018

Когда я запускаю следующий код

import glob,os
import pandas as pd
dirpath = os.getcwd()
inputdirectory = dirpath

for xls_file in glob.glob(os.path.join(inputdirectory,"*.xls*")):    
     data_xls = pd.read_excel(xls_file, sheet_name=0, index_col=None)
     csv_file = os.path.splitext(xls_file)[0]+".csv"
     data_xls.to_csv(csv_file, encoding='utf-8', index=False)

Он преобразует все файлы xls в папке в CSV, как я хочу.ОДНАКО при этом любые даты, такие как 20/12/2018, будут преобразованы в 20/12/2018 00:00:00, что вызывает серьезные проблемы с последующей обработкой данных.

Что не так сэтот?

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Исходный файл xls на самом деле хранит эти поля как datetime.

Когда вы открываете его в Excel - вы видите, что он отформатирован так, как Excel думает, что вы хотите видеть его, основываясь на ваших настройках / локали ОС / и т. Д..

Когда python читает файл, ячейки даты становятся объектами даты python.

CSV-файлы в основном просто текстовые, они не могут содержать объекты даты и времени.

Когда python необходимо записать объект datetime в текстовый файл, он получает полный текст.

Таким образом, у вас есть 2 варианта:

  1. Измените исходный столбец даты файла на тип текста.или лучший вариант:
  2. Используйте python для итерации этих полей и измените текстовый формат, который вы хотели бы видеть в csv.

Я просто попытался воспроизвести вашу проблему безsuccess:

>>>import pandas as pd
>>>xls_data = pd.read_excel('test.xls', sheet_name=0, index_cole=None)
>>>xls_data
    name       date
0  walla 1988-12-10
1   cool 1999-12-10
>>>xls_data.to_csv(encoding='utf-8', index=False)
'name,date\nwalla,1988-12-10\ncool,1999-12-10\n'`

PS Каждый раз, когда вы имеете дело с объектами datetime, вы должны проверить результат, чтобы увидеть, что-нибудь изменится в зависимости от настроек вашего компьютера.

0 голосов
/ 20 декабря 2018

если приведенные выше ответы все еще не работают, попробуйте это?

import datetime as dt
xls_data['date']=pd.to_datetime(xls_data['date'], format="%d/%m/%y")
xls_data['date'] = xls_data['date'].dt.date
0 голосов
/ 20 декабря 2018

Само по себе ничего не происходит.Вам просто нужно указать пользовательские date_format до df.to_csv:

date_format: строка, по умолчанию Нет Форматировать строку для объектов даты и времени

В вашем случае это будет

data_xls.to_csv(csv_file, encoding='utf-8', index=False, date_format='%d/%m/%Y')

Это исправит способ сохранения необработанных данных в файл.Если вы откроете файл в Excel, вы все равно сможете увидеть его в полном формате.Это потому, что Excel пытается принять форматы ячеек на основе их содержимого.Вам нужно будет щелкнуть правой кнопкой мыши по столбцу и выбрать другое форматирование ячейки, с этим ничего не может поделать панда или Python (если вы используете to_csv, а не to_excel).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...