Преобразуйте код манипуляции с датой в функцию, затем примените его к нескольким столбцам - PullRequest
1 голос
/ 05 марта 2020

Допустим, данный фрейм данных df содержит два столбца с типом даты start_date и end_date, и им обоим нужно манипулировать с помощью приведенного ниже кода:

df['date'] = df['date'].str.split('d').str[0].add('d')
df['date'] = df['date'].str.replace('Y', '-').str.replace('m', '-').str.replace('d', '')
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d', errors='coerce').dt.date

Просто удивительно, как я могу конвертировать для функции date_manipulate, например:

def date_manipulate(x):
    return ...

Затем примените ее к этим двум столбцам, спасибо за вашу помощь.

df[['start_date', 'end_date']] = df[['start_date', 'end_date']].apply(date_manipulate)

1 Ответ

1 голос
/ 05 марта 2020

Изменить df['date'] на x, поскольку DataFrame.apply обрабатывает оба столбца, как Series:

def date_manipulate(x):
    x = x.str.split('d').str[0].add('d')
    x = x.str.replace('Y', '-').str.replace('m', '-').str.replace('d', '')
    x = pd.to_datetime(x, format='%Y-%m-%d', errors='coerce').dt.date
    return x

Также возможно упростить код:

def date_manipulate(x):
    x = x.str.split('d').str[0].add('d')
    x = pd.to_datetime(x, format='%YY%mm%dd', errors='coerce').dt.date
    return x
...