在 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
...
我有以下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 | ... |