Условно изменить год в DOB - PullRequest
1 голос
/ 29 марта 2019

У меня есть столбец «дата», который я очистил, чтобы изменить все даты на один и тот же формат (дата / месяц / год).

Поскольку изначально некоторые даты заканчивались двумя цифрами, например, год. 2/7/95, они были преобразованы в 02/07/2095. Однако мне нужно поменять год тех дат 21-го века на 20-й, поэтому 20yy -> 19yy.

Это моя функция на данный момент:

df['date'] = pd.to_datetime(df['date']).dt.strftime('%d/%m/%Y')

Ввод -> Выход функции -> Ожидаемый выход:

 07/12/02  -> 07/12/2002 -> 07/12/1902
 07-Sep-09 -> 07/09/2019 -> 07/09/1919

Как мне:

  • Извлечение раздела Год после функции
  • Проверьте, нужно ли его менять
    • Изменить год, если да

Я пробовал это:

year= pd.DatetimeIndex(df['date']).year 
if year.any() > 2000:
    subset['date']= pd.Timedelta(pd.offsets.year(1000))

Ответы [ 3 ]

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

dt.strftime преобразует дату и время в другие форматы, но тогда dtype столбца будет объектом (строкой).

df['date'] = pd.to_datetime(df['date']).apply(lambda x: 
             x - pd.DateOffset(years=100) if x.year >= 2000 else x)

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

df['date'] = pd.to_datetime(df['date']).apply(lambda x: 
             x - pd.DateOffset(years=100) if x.year >= 2000 else x).dt.strftime('%d/%m/%Y')
0 голосов
/ 29 марта 2019

Обновлено для однолинейного решения.

df=pd.DataFrame({'date':['07/12/02','07/09/19']})
df['date']=np.where( pd.to_datetime(df['date']).dt.year>2000,( pd.to_datetime(df['date']) - pd.DateOffset(years=100)), pd.to_datetime(df['date']))

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

На основании этого ...

year= pd.DatetimeIndex(df['date']).year 
if year.any() > 2000:
    subset['date']= pd.Timedelta(pd.offsets.year(1000))

Кажется, вы хотели бы что-то вроде

subset['date'] = subset['date'].mask(subset['date'].dt.year > 2000, 
                                     subset['date'] - pd.DateOffset(years=100))

Что для тех, кто старше 2000 года, вычтет 100 лет с даты. А в тех случаях, когда условие (параметр 1) не выполняется, сохраните исходное значение.

Обратите внимание, что в этом ответе предполагается, что subset['date'] - это дата-ряд Pandas.

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