Сопоставить объект datetime YYYY-MM-DD в кадре данных pandas - PullRequest
1 голос
/ 25 мая 2020

У меня есть pandas DataFrame формы:

    id     amount           birth
0   4      78.0      1980-02-02 00:00:00
1   5      24.0      1989-03-03 00:00:00
2   6      49.5      2014-01-01 00:00:00
3   7      34.0      2014-01-01 00:00:00
4   8      49.5      2014-01-01 00:00:00

Меня интересуют только год, месяц и день в столбце birth в dataframe. Я попытался использовать Python datetime из pandas, но это привело к ошибке:

OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1054-02-07 00:00:00

Столбец birth имеет тип object dtype.

Я предполагаю, что будь то дата неверная. Я бы не хотел бы передать параметр errors="coerce" в метод to_datetime, потому что каждый элемент важен, а мне нужен только YYYY-MM-DD.

Я пытался использовать regex из pandas:

df["birth"].str.find("(\d{4})-(\d{2})-(\d{2})")

Но это возвращает NANs. Как я могу решить эту проблему?

Спасибо

1 Ответ

1 голос
/ 25 мая 2020

Поскольку невозможно преобразовать в дату и время, вы можете использовать split сначала пробелом, а затем выбрать первое значение:

df['birth'] = df['birth'].str.split().str[0]

А затем, если необходимо, преобразовать в периоды.

Представление диапазонов за пределами границ .

print (df)
   id  amount                birth
0   4    78.0  1980-02-02 00:00:00
1   5    24.0  1989-03-03 00:00:00
2   6    49.5  2014-01-01 00:00:00
3   7    34.0  2014-01-01 00:00:00
4   8    49.5     0-01-01 00:00:00

def to_per(x):
    splitted = x.split('-')
    return pd.Period(year=int(splitted[0]), 
                     month=int(splitted[1]), 
                     day=int(splitted[2]), freq='D')

df['birth'] = df['birth'].str.split().str[0].apply(to_per)

print (df)
   id  amount       birth
0   4    78.0  1980-02-02
1   5    24.0  1989-03-03
2   6    49.5  2014-01-01
3   7    34.0  2014-01-01
4   8    49.5  0000-01-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...