在Python Pandas中保留月份和日期作为日期格式

3

我想把一个以yyyy-mm-dd格式显示的列转换为mm-dd格式(或者MON DD格式),同时保留日期或数字格式。我尝试使用pd.to_datetime进行转换,但似乎无法工作,因为它需要年份,所以它最终会用1900年来填充新列。我不希望将新列转换为对象,因为之后我需要使用该列进行绘图。有什么最好的方法吗?数据框非常小。

OldDate             NewDate1     NewDate2      NewDate3
2017-01-02          01-02        01/02         Jan 2
2015-05-14          05-14        05/14         May 14

据我所知,你不能放弃年份并使用日期格式。你能做的最好的是一个字符串。 - piRSquared
好的,如果是这样并且我有一列 01-01、01-02、01-03 等字符串,我该如何将它们变成序列以便在 x 轴上绘制?为什么一个概念上如此简单的事情变得如此困难呢? - AidKulesh
2个回答

1
假设你有以下内容:
df = pd.DataFrame({"OldDate":["2017-01-02","2015-05-14"]})

df  
    OldDate
0   2017-01-02
1   2015-05-14

然后你可以这样做:
from datetime import datetime as dt

df['OldDate']  = df.OldDate.apply(lambda s: dt.strptime(s, "%Y-%m-%d"))
df['NewDate1'] = df.OldDate.dt.strftime("%m-%d")
df['NewDate2'] = df.OldDate.dt.strftime("%m/%d")
df['NewDate3'] = df.OldDate.dt.strftime("%b %d")

df
    OldDate NewDate1    NewDate2    NewDate3
0   2017-01-02  01-02   01/02   Jan 02
1   2015-05-14  05-14   05/14   May 14

这也会产生一个字符串,这就是 OP 正试图避免的。 - Pirate X
@PirateX numpy/pandas的日期时间表示是固定的。对于非常规表示,请使用strftime(format)。不足之处在于,对于非常规表示,您将始终拥有字符串/对象。如果您有不同的观点,请通过示例分享。 - Sergey Bushmanov

0

您可以像下面这样在OldDate上使用子字符串概念:

OldDate = '2017-01-02'

NewDate1=OldDate[5:]
print(NewDate1) # This will give result as : "01-02"

NewDate2 = OldDate[5:7] + "/" + OldDate[8:10]
print(NewDate2) # This will give result as "01/02"

这会生成一个字符串,而我正试图避免这种情况。 - AidKulesh

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