Pandas,将日期格式从dd/mm/yyyy转换为MMM dd/yy

3
我想将日期从 dd/mm/yyyy 更改为 MMM dd/yy,例如 15/04/2021 更改为 APR 15/21
我的 Date 列格式为 object
我正在执行以下操作: df['Date'] = pd.to_datetime(df['Date'], format='%MMM %DD/%YY') 但是我得到了错误信息:ValueError: time data '15/04/2021' does not match format '%MMM %dd/%yy' (match)
任何帮助将不胜感激。

用于什么目的?在控制台中显示数据框,还是导出到Excel? - Corralien
是的。在数据框中显示,以便最终使用Excel。 - excelguy
如果您将一个字符串日期时间转换为 datetime64 类型,那么显示格式将始终为 "YYYY-MM-DD"。请参考此答案 - Corralien
1
这个回答解决了你的问题吗?如何在pandas中更改日期时间格式 - Corralien
3个回答

3
您需要将原始的Date列转换为datetime格式(pandas默认会将日期读取为字符串)。之后,只需更改显示格式即可。
请尝试以下操作:
# Convert to datetime
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%y')

# Solution for title: change display to 'MMM dd/y'
df['Date'] = df['Date'].dt.strftime('%b %d/%y').astype(str).str.upper()

# Solution for comment: change display to 'MMM dd y'
df['Date'] = df['date'].dt.strftime('%b %d %y').astype(str).str.upper()

谢谢Arturo,但我想要格式为“APR 15 21”。 - excelguy
我编辑了我的代码,使其完全匹配。也就是说,将月份大写并去掉了“/”。这样做可以解决问题吗? - Arturo Sbr

3
>>> import pandas as pd

>>> df = pd.DataFrame({'Date':['15/04/2021', '12/05/2021', '4/6/2021']})
>>> df
         Date
0  15/04/2021
1  12/05/2021
2    4/6/2021

>>> df['Date'] = pd.to_datetime(df['Date'])
>>> df
        Date
0 2021-04-15
1 2021-12-05
2 2021-04-06

>>> df['date_formated'] = df['Date'].dt.strftime('%b %d/%y').str.upper()
>>> df
        Date date_formated
0 2021-04-15     APR 15/21
1 2021-12-05     DEC 05/21
2 2021-04-06     APR 06/21

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 2 columns):
 #   Column         Non-Null Count  Dtype         
---  ------         --------------  -----         
 0   Date           3 non-null      datetime64[ns]
 1   date_formated  3 non-null      object        
dtypes: datetime64[ns](1), object(1)
memory usage: 176.0+ bytes

得到错误 AttributeError: Can only use .dt accessor with datetimelike values - excelguy
我已经在更新的代码中修复了数据格式。 - imdevskp
抱歉我的问题没有表达清楚,我想将“15/04/2021”转换为“APR 15/21”。 - excelguy
嗨@excelguy,请查看更新的答案。 - imdevskp

1
尝试 -
df.loc['Date'] = pd.to_datetime(df.Date).dt.strftime('%b %d/%y').str.upper()

确保数据列不包含任何NAN值。如果有,请在使用之前处理它们 :) - Nk03
谢谢!看起来可以工作了!但是收到了这个消息:SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead - excelguy
您需要添加 .loc df.loc['Date']。 - Nk03
那么 .loc df.loc['Date'] = ... 是什么意思? - excelguy
1
谢谢,它起作用了!但是似乎多出了一行带有单词“日期”和含有Nan值的行。 - excelguy
让我们在聊天中继续这个讨论 - Nk03

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接