Python数据帧-将对象数据帧列转换为mm/dd格式



我有几个数据帧列,我想将对象列转换为mm/dd格式。目前,我的专栏包含以下值:

date_column
31-Dec
-
09-Aug
sometext
28-Feb

我需要以下格式的所需输出:

desired_output
12/31
-
08/09
sometext
02/28

我尝试了以下两行代码,但我得到了以下错误:ValueError: time data '31-Dec' does not match format '%MM%dd' (match)

df['value'] = pd.to_datetime(df['value'], format="%MM%dd")
df['value'] = pd.to_datetime(df['value'], format="%mm%dd")

假设您有一条记录作为1月1日的字符串。首先,您需要将其转换为日期时间对象:

x = datetime.datetime.strptime('1-Jan', '%d-%b')

接下来,要获得所需的输出:

y = datetime.datetime.strftime(x, '%m/%d')

这产生:

print(y)
01/01

您需要将上述过程应用于您的列。

您可以尝试使用regex:

mask = df.date_column.str.match("dd-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)")
new = df.date_column[mask].add('-00').pipe(pd.to_datetime).dt.strftime("%m/%d")
df.loc[mask, 'date_column'] = new 

输出

df
date_column
0       12/31
1           -
2       08/09
3    sometext
4       02/28

首先将字符串序列转换为pandas-datetime,然后使用series.dt.strftime 获取格式化的字符串

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

相关内容

最新更新