Преобразование в дату и время - PullRequest
0 голосов
/ 14 марта 2019

Я начинающий в Python.У меня проблема с преобразованием моих данных в формат даты и времени.В столбце DTNAIPRS у меня есть:

0    1972-12-22
1    1936-04-01
2    1925-10-05
3    1926-07-09
4    1952-01-12
5    1964-12-31
6    1940-01-13
7    1942-09-01
8    1939-01-12
9    1954-04-14
10   0001-01-01
11   1944-04-18
12   0001-01-01
13   1932-11-16
14   1936-05-18
15   1936-07-02
16   1944-01-13
17   1954-06-20
18   1927-02-14
19   1938-04-29
20   0001-01-01

И когда я пытаюсь преобразовать его в дату и время с помощью этого: test = pd.to_datetime(T_Client.DTNAIPRS.values)

У меня есть эта ошибка:

>Traceback (most recent call last):
  File "/tmp/zeppelin_pyspark-6081451798601516313.py", line 349, in <module>
    raise Exception(traceback.format_exc())
Exception: Traceback (most recent call last):
  File "/tmp/zeppelin_pyspark-6081451798601516313.py", line 342, in <module>
    exec(code)
  File "<stdin>", line 4, in <module>
  File "/misc/anaconda2-4.4.0/envs/dev2/lib/python2.7/site-packages/pandas/core/tools/datetimes.py", line 380, in to_datetime
    result = _convert_listlike(arg, box, format)
  File "/misc/anaconda2-4.4.0/envs/dev2/lib/python2.7/site-packages/pandas/core/tools/datetimes.py", line 306, in _convert_listlike
    raise e
OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

Не могли бы вы помочь мне, пожалуйста?Спасибо

Ответы [ 4 ]

1 голос
/ 14 марта 2019

Поскольку pandas представляет временные метки в наносекундном разрешении, промежуток времени, который может быть представлен с использованием 64-разрядного целого числа, ограничен примерно 584 годами

значение вашей даты выходит за пределы диапазона 1-01-01 00:00:00, поэтому ошибка выходит за границы.

In [92]: pd.Timestamp.min
Out[92]: Timestamp('1677-09-21 00:12:43.145225')

In [93]: pd.Timestamp.max
Out[93]: Timestamp('2262-04-11 23:47:16.854775807')

См. Здесь , Вне границ

0 голосов
/ 14 марта 2019

Ваша проблема в том, что ваш столбец содержит (странную) дату, которая не может быть представлена ​​в базовом типе pd.Timestamp, поскольку она получена из типа numpy datetime64 (подробности см. Ответ Маноя Кумара ).

Простой способ - отфильтровать эти значения перед преобразованием:

pd.to_datetime(T_Client.DTNAIPRS.where(T_Client.DTNAIPRS>='1677-09-22'))
0 голосов
/ 14 марта 2019

Я использую этот код для преобразования str во время.сначала примените формат, который вы хотите иметь, в моем случае это час / минута / секунда, вы можете вставить yyyy-mm-dd

, затем выбрать столбец, который нужно изменить, и изменить .dt.time на .dt.date

frmt= '%H:%M:%S'
df['column name'] = pd.to_datetime(df['column name'],format=frmt).dt.time

удачи

0 голосов
/ 14 марта 2019

Вот пошагово

import pandas as pd
import numpy as np

d = ['1972-12-22','1936-04-01','1925-10-05','1926-07-09','1952-01-12']
df = pd.DataFrame({'dates' :d})
df['dates'] = df['dates'].astype(pd.datetime)
df['dates'].dtype
df2 = pd.to_datetime(df['dates'])
print(df2)

Вот это пробовал в гугле колабе, думаю это то что вы искали Working Output

Если у вас возникнут дополнительные проблемы, дайте мне знать.

...