я хочу конвертировать 1-мая-19 и 01.05.2009 в 05.01.2009 в моем фрейме данных - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть 2 столбца с форматами даты: 01.05.2009 и 1 мая 19. я хочу их в формате 05.01.2009.

код, упомянутый здесь, похоже, не меняет формат 1 столбца, мне нужно преобразовать оба столбца в формат 1/5/2019

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

Ответы [ 3 ]

0 голосов
/ 30 апреля 2019
# I guess you have two different columns with different dateformats as per the #  question , please check the below answer.

from datetime import datetime
df=pd.DataFrame({'start_date':['5/1/2019','7/11/2019','3/10/2019'],
                 'end_date':['1-May-19','2-Mar-19','11-May-19']})
df

    start_date  end_date
0   5/1/2019    1-May-19
1   7/11/2019   2-Mar-19
2   3/10/2019   11-May-19

def try_parsing_date(text):
    for fmt in ("%m/%d/%Y",'%d-%b-%y'):
        try:
            return datetime.strptime(text, fmt).strftime('%d/%m/%Y')
        except ValueError:
            pass
    raise ValueError('no valid date format found')

df['new_start_date']=df['start_date'].apply(try_parsing_date)
df['new_end_date']=df['end_date'].apply(try_parsing_date)
df

   start_date   end_date    new_start_date  new_end_date
0   5/1/2019    1-May-19    01/05/2019  01/05/2019
1   7/11/2019   2-Mar-19    11/07/2019  02/03/2019
2   3/10/2019   11-May-19   10/03/2019  11/05/2019

enter image description here

0 голосов
/ 30 апреля 2019

У вас правильный подход, но неверное исполнение

Наш старт df:

df = pd.DataFrame({"col_1":["5/1/2019"], "col_2":["1-May-19"]})

col_1       col_2
5/1/2019    1-May-19

Вот как этого добиться в простом решении:

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

, что дает:

col_1   col_2
01/05/2019  01/05/2019

Или в две строки с методом цепочки

df["col_1"] = pd.to_datetime(df["col_1"]).dt.strftime('%d/%m/%Y')
df["col_2"] = pd.to_datetime(df["col_1"]).dt.strftime('%d/%m/%Y')
0 голосов
/ 30 апреля 2019

Используйте to_datetime с Series.dt.strftime с различными format s:

df = pd.DataFrame({"a":["5/1/2019"], "b":["1-May-19"]})

df['a'] = pd.to_datetime(df['a'], format='%m/%d/%Y').dt.strftime('%m/%d/%Y')
df['b'] = pd.to_datetime(df['b'], format='%d-%b-%y').dt.strftime('%m/%d/%Y')

print (df)
            a           b
0  05/01/2019  05/01/2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...