在 pandas 中转换上个月结束日的特定日期格式

Convert specific date format in the ending day of previous month in pandas

我有以下table格式

 Date1     | Date2     | other columns
 12FEB2019 | 12OCT2020 | ...
 19FEB2019 | 08NOV2021 | ...
 ...       | ...       | ...

我想把它转换成

 Date1     | Date2     | other columns
 31JAN2019 | 30SEP2020 | ...
 31JAN2019 | 31OCT2021 | ...
 ...       | ...       | ...

这是我迄今为止对 Date1(对 Date2 也类似)尝试的方法:

from pandas.tseries.offsets import MonthEnd
df['Date1'] = pd.to_datetime(df.Date1) - MonthEnd(1)

但是,结果格式不同(例如 2020-09-30 而不是 30SEP2020),这与我的预期不同 我应该在我的代码中添加什么以获得所需的格式?

你应该看看 strftime documentation

这是一个例子

date = pd.to_datetime("31JAN2019")
date.strftime("%d%b%Y")
>> 31Jan2019

您可以对字符串使用 .upper() 方法来获得全部大写的输出。

在您的示例中,您可以这样应用上面的内容:

df['Date1'] = pd.to_datetime(df.Date1) - MonthEnd(1)
df['Date1'] = df['Date1'].apply(lambda x: x.strftime("%d%b%Y").upper())

完成日期逻辑后,使用strftime()

将其转换回字符串
df = pd.read_csv(io.StringIO("""Date1     | Date2     | other columns
 12FEB2019 | 12OCT2020 | ...
 19FEB2019 | 08NOV2021 | ..."""), sep="|")
df.columns = [c.strip() for c in df.columns]


df.assign(**{c:(pd.to_datetime(df[c]) - pd.tseries.offsets.MonthEnd(1)).dt.strftime("%d%b%Y").str.upper()
 for c in df.columns if c.startswith("Date")})

Date1 Date2 other columns
0 31JAN2019 30SEP2020 ...
1 31JAN2019 31OCT2021 ...