Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 将日期字符串从格式mm/d/yyyy和mm/dd/yyyy转换为dd.mm.yyyy_Regex_Pandas_Date - Fatal编程技术网

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

Regex 将日期字符串从格式mm/d/yyyy和mm/dd/yyyy转换为dd.mm.yyyy,regex,pandas,date,Regex,Pandas,Date,我有一个熊猫数据框,其中包含一列日期。日期由格式为mm/dd/yyyy的字符串表示 但是我对当天的格式有一个问题:一个月的第9天之前的日期格式是mm/d/yyyy。例如,2008年12月1日显示为12/1/2008。截至月末的第10天显示为mm/dd/yyyy。例如,2008年12月17日用12/17/2008表示 我的目标是将所有日期转换为mm.dd.yyyy格式。可能代表上述表述为:12.01.2008和12.17.2008 我的想法是将日、月和年写在单独的列中,然后以mm.dd.yyyy格

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

但是我对当天的格式有一个问题:一个月的第9天之前的日期格式是mm/d/yyyy。例如,2008年12月1日显示为12/1/2008。截至月末的第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']的代码中,我得到了以下错误:错误:位置0处的未终止字符集

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为datetime类型提供了一个特殊的
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

我认为最简单的解决方案是
pd.to_datetime(df['date'])
。它正确地解析了该格式,并且使用
datetime
d键入,您的生活可能会变得轻松得多。这就是问题的答案(请参阅已接受的答案)!谢谢。是的,那正是我想要的!非常感谢。我曾经在其他情况下使用datetime和strftime,但我认为在这种情况下这是不可能的。太多了!完成!我接受了。