python中的字符串日期转换

Posted

技术标签:

【中文标题】python中的字符串日期转换【英文标题】:String Date conversion in python 【发布时间】:2019-05-02 19:45:34 【问题描述】:

我有一个日期格式为“Mar-97”的数据框,我想将其转换为“03-1997”。数据格式为

     Month  SilverPrice GoldPrice
0   Mar-97  186.48  12619.24
1   Apr-97  170.65  12338.59
2   May-97  170.44  12314.94
3   Jun-97  169.96  12202.78
4   Jul-97  155.80  11582.07

我已经编写了这段代码,但它正在将其转换为“1997-03-01”

from datetime import datetime
df["Month"]=list(map(lambda x:datetime.strptime(x,'%b-%y'),df["Month"]))

输出是这样的

      Month SilverPrice GoldPrice
0   1997-03-01  186.48  12619.24
1   1997-04-01  170.65  12338.59
2   1997-05-01  170.44  12314.94
3   1997-06-01  169.96  12202.78
4   1997-07-01  155.80  11582.07

我可以通过剥离日期值来做到这一点,但有没有直接的方法可以将其转换为“MM-YYYY”格式。

【问题讨论】:

【参考方案1】:

pd.Series.dt.strftime

您可以通过 Python 的 strftime directives 指定您的 datetime 格式:

df['Month'] = pd.to_datetime(df['Month']).dt.strftime('%m-%Y')

print(df)

     Month  SilverPrice  GoldPrice
0  03-1997       186.48   12619.24
1  04-1997       170.65   12338.59
2  05-1997       170.44   12314.94
3  06-1997       169.96   12202.78
4  07-1997       155.80   11582.07

【讨论】:

但它给出了这个错误ValueError: day is out of range for month @ManishKumarSingh :您收到错误,因为日期列格式混淆了。 “Mar-98”和“2-Sep”这两种格式出现在该列中。打开excel就可以看到。解决方案是 df['Month'] = pd.to_datetime(df["Month"].apply(lambda x: datetime.strptime(x,'%b-%y'))).dt.strftime( '%m-%Y')【参考方案2】:

你可以这样做:

from datetime import datetime

import pandas as pd

data = ['Mar-97',
        'Apr-97',
        'May-97',
        'Jun-97',
        'Jul-97']

df = pd.DataFrame(data=data, columns=['Month'])
df["Month"] = list(map(lambda x: datetime.strptime(x, '%b-%y').strftime('%m-%Y'), df["Month"]))
print(df)

输出

     Month
0  03-1997
1  04-1997
2  05-1997
3  06-1997
4  07-1997

【讨论】:

【参考方案3】:

日期列格式在此数据集中混用。两个明显的区别是“Mar-98”和“2-Sep”。 如果你用excel打开这两种格式是可见的。

The solution for this is, 

df['Month'] = pd.to_datetime(df["Month"].apply(lambda x: datetime.strptime(x,'%b-%y'))).dt.strftime('%m-%Y') 

【讨论】:

以上是关于python中的字符串日期转换的主要内容,如果未能解决你的问题,请参考以下文章

python 将字符串格式的日期(DD.MM.YYYY)转换为Pandas中的日期格式

将字符串转换为日期格式:DD-MMM-YYYY 到 Python 中的日期时间 [重复]

python中的日期时间格式转换[重复]

python - 如何在没有dateutil的情况下将时区感知字符串转换为Python中的日期时间?

linq 怎么转换日期为字符串

linq 怎么转换日期为字符串