ValueError: остаются не преобразованные данные: 00 - PullRequest
1 голос
/ 08 января 2020

Я использую метод 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')

Более изящное решение было бы добро пожаловать

Ответы [ 2 ]

1 голос
/ 08 января 2020

Вот хороший способ увидеть, где происходит сбой функции:

df = pd.DataFrame({'date': ['03/01/00','13/01/2000','00/01/00']})

def date_format(f):
    try:
        return pd.to_datetime(f)
    except Exception as e:
        return e.args

print(df['date'].apply(date_format))

0          2000-03-01 00:00:00
1          2000-01-13 00:00:00
2    (month must be in 1..12,)
0 голосов
/ 08 января 2020

попробуйте передать infer_datetime_format как true, возможно, в ваших данных дата не соответствует формату, который вы передаете

pd.to_datetime(df['Date'], infer_datetime_format=True) 

ИЛИ передать ошибки = 'игнорировать'

pd.to_datetime(df['Date'], format = '%d/%m/%y',errors='ignore')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...