Pandas 将日期字符串从格式 mm/d/yyyy 和 mm/dd/yyyy 转换为 dd.mm.yyyy

Posted

技术标签:

【中文标题】Pandas 将日期字符串从格式 mm/d/yyyy 和 mm/dd/yyyy 转换为 dd.mm.yyyy【英文标题】:Pandas transform date string from format mm/d/yyyy and mm/dd/yyyy to dd.mm.yyyy 【发布时间】:2020-01-11 13:04:38 【问题描述】:

我有一个包含日期列的 Pandas 数据框。日期由格式为 mm/dd/yyyy 的字符串表示。

但是我有一个问题当天的格式:直到一个月的第 9 天的日期格式为 mm/d/yyyy。例如,2008 年 12 月 1 日显示为 2008 年 12 月 1 日。到月底的第 10 天显示为 mm/dd/yyyy。例如,2008 年 12 月 17 日用 12/17/2008 表示。

我的目标是将所有日期转换为mm.dd.yyyy的形式。可以将上述示例表示为:12.01.2008 和 12.17.2008

我的想法是把日、月、年写成单独的列,然后以 mm.dd.yyyy 格式连接字符串

到目前为止,我已尝试仅通过字符串 中的位置来提取年份和月份(参见下面的代码和示例)。但这不适用于日期,因为有两种情况:日期有一位数或两位数。

我的想法是只使用一个正则表达式基本上是这样的反斜杠一个或两个数字和一个反斜杠。但我不知道如何将其表达为正则表达式。

或者有没有更简单的完全不同的方法?

提前感谢您的帮助!我确信有一种方法可以使用正则表达式来做到这一点。但我也很感谢完全不同的方法。

import pandas as pd

# example data frame with dates in the format mm/d/yyyy and mm/dd/yyyy
df = pd.DataFrame('date' : ['12/1/2008','12/5/2008','12/10/2008','12/17/2008'])

# withdraw month
df['month'] = df['date'].str[:2]
# withdraw year
df['year'] = df['date'].str[-4:]
# withdraw day - this is my problem
df[day] = df['day'] = df['date'].str.extract(r'[\]\d*')

# generate string with dates in the format mm/dd/yyyy
df['date_new'] = df['month'] + '.' df['day'] + '.' + df['year']

df['day'] 的代码中,我得到以下错误:error: unterminated character set at position 0

【问题讨论】:

我认为最简单的解决方案是pd.to_datetime(df['date'])。它会正确解析该格式,并且使用 datetime dtype 您的生活可能会变得更轻松。 这就是问题的答案(见接受的答案)!谢谢。 【参考方案1】:

我想你正在寻找这个:

df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.strftime('%m.%d.%Y')

输出:

         date
0  12.01.2008
1  12.05.2008
2  12.10.2008
3  12.17.2008


如果您想提取天、月、年左右的时间,需要注意的另一件事是,pandas 具有特殊的 dt 日期时间类型功能,因此,您需要先将列转换为该类型。

您可以像这样访问日期和月份:

df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
df['year'] = df['date'].dt.year

你会得到类似的东西:

        date  month  day  year
0 2008-12-01     12    1  2008
1 2008-12-05     12    5  2008
2 2008-12-10     12   10  2008
3 2008-12-17     12   17  2008

【讨论】:

是的,这正是我想要的!谢谢!我在其他情况下使用了 to_datetime 和 strftime,但认为在这种情况下这是不可能的。非常感谢! 完成!接受了。

以上是关于Pandas 将日期字符串从格式 mm/d/yyyy 和 mm/dd/yyyy 转换为 dd.mm.yyyy的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 将字符串格式化为日期时间 - 指令问题

pandas使用strftime函数将dataframe的日期格式数据列按照指定格式(format)转化为日期(时间)字符串数据列

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

如何在 pandas python 中将字符串转换为日期时间格式?

pandas将dataframe中的年月日数据列合并成完整日期字符串并使用to_datetime将字符串格式转化为日期格式

将 JSON 时间戳字符串转换为 pandas 数据框中的 python 日期