Исправить строки даты с днями и месяцами, чередующимися в определенных строках - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь загрузить некоторые данные из файла CSV и найти, что значения даты и месяца взаимозаменяемы.

Ниже приведены данные о том, как выглядят данные:

id,date
1001,09/10/2018
1002,20/09/2018
1003,09/05/2018

Вседаты с сентября, но, как видно, они взаимозаменяемы в другом формате.Я использую ниже, чтобы преобразовать в datetime

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

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

У Pandas нет проблем, связанных с вашими выборочными данными, потому что они явно присутствуют в US нотации , за исключением случая '20/09/2018', где 20 не может быть месяцем, с которым у Pandas нет проблемлибо.

Однако, если входные данные содержат, например, '10/09/2018' (как было упомянуто в комментариях), где невозможно различить день и месяц, если только не приняты обозначения США или заранее не известно, что абсолютно вседаты в сентябре.

Так как последнее, кажется, имеет место, вы можете сделать

df['date'].map(lambda x: pd.datetime(x.year, x.day, x.month)
               if (x.month != 9) & (x.day == 9)
               else x)

0   2018-09-10
1   2018-09-20
2   2018-09-05
0 голосов
/ 10 декабря 2018

Я придумал хитрый маленький трюк, используя str.extract и pd.to_datetime, чтобы сделать это быстро и эффективно:

m = df.date.str.extract(r'(?:(09)/(\d+))')[1].astype(int) > 31
df['date'] = [
    pd.to_datetime(d, dayfirst=m) for d, m in zip(df.date, m)]

     id       date
0  1001 2018-09-10
1  1002 2018-09-20
2  1003 2018-09-05
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...