我有几个数据帧列,我想将对象列转换为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")