Я использую метод pd.to_datetime()
для преобразования столбца строк в объекты даты и времени.
import pandas as pd import numpy as np
main = pd.read_csv('correctedstats.csv', nrows = 50) main['Date'] =
pd.to_datetime(main['Date'], format = '%d/%m/%y')
Что дает мне следующую ошибку -
Traceback (большинство последний вызов последним): файл "/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py", строка 448, в значениях _convert_listlike_datetimes, tz = translation.datetime_to_datetime64 ( arg) Файл "pandas / _libs / tslibs / translation.pyx", строка 200, в pandas ._ libs.tslibs.conversion.datetime_to_datetime64 TypeError: Тип нераспознанного значения:
Во время обработки вышеуказанного исключения другое возникла исключительная ситуация:
Traceback (последний вызов был последним): файл "mergeDates.py", строка 8, в main ['Date'] = pd.to_datetime (main ['Date']. astype (str) , format = '% d /% m /% y') Файл "/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/util/_decorators.py", строка 208, в возврате оболочки fun c (* args, ** kwargs) Файл "/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py", l 778, в to_datetime values = convert_listlike (arg._values, True, format) Файл "/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py", строка 451, в _convert_listlike_datetimes поднять файл "/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py", строка 416, в аргументе _convert_listlike_datetimes, формат, точный = точный , ошибки = ошибки Файл "pandas / _libs / tslibs / strptime.pyx", строка 148, в pandas ._ libs.tslibs.strptime.array_strptime ValueError: остаются не преобразованные данные: 00
Дата в формате '03 / 01/00 '
Код работает нормально, если использовать текст даты в функции следующим образом
pd.to_datetime('03/01/00', format = '%d/%m/%y')
Что я здесь не так делаю ?
Редактировать - companystats.csv -
0 1.0 34.0 Asian Paints 15.90 INE021A01026 03/01/00
1 2.0 34.0 Asian Paints 16.06 INE021A01026 04/01/00
2 3.0 34.0 Asian Paints 15.96 INE021A01026 05/01/00
3 4.0 34.0 Asian Paints 15.73 INE021A01026 06/01/00
4 5.0 34.0 Asian Paints 16.07 INE021A01026 07/01/00
5 6.0 34.0 Asian Paints 17.29 INE021A01026 10/01/00
6 7.0 34.0 Asian Paints 17.30 INE021A01026 11/01/00
7 8.0 34.0 Asian Paints 17.40 INE021A01026 12/01/00
8 9.0 34.0 Asian Paints 17.45 INE021A01026 13/01/2000
9 10.0 34.0 Asian Paints 17.08 INE021A01026 14/01/2000
10 11.0 34.0 Asian Paints 17.14 INE021A01026 17/01/2000
11 12.0 34.0 Asian Paints 17.25 INE021A01026 18/01/2000
12 13.0 34.0 Asian Paints 17.47 INE021A01026 19/01/2000
13 14.0 34.0 Asian Paints 17.52 INE021A01026 20/01/2000
14 15.0 34.0 Asian Paints 17.74 INE021A01026 21/01/2000
15 16.0 34.0 Asian Paints 19.10 INE021A01026 24/01/2000
16 17.0 34.0 Asian Paints 20.61 INE021A01026 25/01/2000
17 18.0 34.0 Asian Paints 19.71 INE021A01026 27/01/2000
18 19.0 34.0 Asian Paints 20.03 INE021A01026 28/01/2000
19 20.0 34.0 Asian Paints 19.19 INE021A01026 31/01/2000
20 21.0 34.0 Asian Paints 19.18 INE021A01026 01/02/00
21 22.0 34.0 Asian Paints 19.17 INE021A01026 02/02/00
22 23.0 34.0 Asian Paints 19.00 INE021A01026 03/02/00
23 24.0 34.0 Asian Paints 19.03 INE021A01026 04/02/00
РЕДАКТИРОВАТЬ - Решено! В моем столбце даты было два типа дат;
21/01/2000
и
02/02/00
Я использовал Атрибут errors метода pd.to_datetime () для создания двух отдельных столбцов, которые я затем объединил, чтобы получить желаемый столбец
pd.to_datetime(main,format = '%d/%m/%y', errors = 'coerce')
и
pd.to_datetime(main,format = '%d/%m/%Y', errors = 'coerce')
Более изящное решение было бы добро пожаловать