Python 2.7 在pandas中转换为日期格式

Python 2.7 在pandas中转换为日期格式,python-2.7,pandas,Python 2.7,Pandas,我有一个数据框,其中包含一列,其中包含: Date: 31062005 072005 12005 2012 我想将这些日期转换为以下格式: Date: 31/06/2005 07/2005 01/2005 2012 最简单的方法是什么?字段还没有日期格式,只有字符串。假设您编写了一个函数 def convert_date(s): if len(s) == 4: return s elif len(s) < 7: return s[: -4

我有一个数据框,其中包含一列,其中包含:

Date:
31062005
072005
12005
2012
我想将这些日期转换为以下格式:

Date:
31/06/2005
07/2005
01/2005
2012

最简单的方法是什么?字段还没有日期格式,只有字符串。

假设您编写了一个函数

def convert_date(s):
    if len(s) == 4:
        return s
    elif len(s) < 7:
        return s[: -4].zfill(2) + '/' + s[-4: ]
    else:
        return s[: -6].zfill(2) + '/' + s[-6: -4].zfill(2) + '/' + s[-4]
请注意,这会将一种形式的字符串转换为另一种形式的字符串,这意味着您无法进一步操作日期。如果您想这样做,我建议您修改前面的函数,对匹配字符串长度的格式使用适当的
datetime.datetime.strtime
。它可能看起来像这样:

def convert_date(s):
    if len(s) == 4:
        return datetime.datetime.strptime('%Y')
    elif len(s) < 8:
        return datetime.datetime.strptime('%m%Y')
    else:
        return datetime.datetime.strptime('%d%m%Y')
def转换日期:
如果len=4:
返回datetime.datetime.strtime(“%Y”)
elif len(s)<8:
返回datetime.datetime.strtime(“%m%Y”)
其他:
返回datetime.datetime.StrTime(“%d%m%Y”)
请注意,您的第一次约会(31天)似乎是非法的

df = pd.DataFrame(['30/06/2005', '07/2005', '1/2005', '2012'], columns=['Date'])

temp = pd.DataFrame(df['Date'].str.split('/').apply(reversed).tolist())\
    .fillna('01')
df['Date'] = pd.to_datetime(temp[0].str.cat(temp[1].str.zfill(2))\
                            .str.cat(temp[2].str.zfill(2)), format='%Y%m%d')

那是一个真实的专栏,还是一个虚构的专栏?你所问的需要一个非常简单但复杂的方法。到目前为止,您做了什么来解决您的问题?我尝试了这个解决方案,但在这种情况下,缺少日期和月份,我在制定正确的正则表达式时遇到了问题。是的,这是因为链接中的答案包含所有三个部分,日期、月份和年份。在你的情况下,它们并不一致。但是他们都有
“/”
,所以也许我有个主意。我会尝试并发布一个答案…@Kartik我的数据集有一百万行,这只是日期列的一个例子。非常感谢。elif结构的一个小变化使它变得完美def convert_date:if len=4:return s elif len<7:return s[:-4].zfill(2)+'/'+s[-4:]否则:return s[:-6].zfill(2)+'/'+s[-6:-4].zfill(2)+'/'+s[-4:]谢谢,@rpkar-updated。由于您对该网站似乎是新手,请注意,您可以对所有您认为有用的答案(不止一个)进行投票。
df = pd.DataFrame(['30/06/2005', '07/2005', '1/2005', '2012'], columns=['Date'])

temp = pd.DataFrame(df['Date'].str.split('/').apply(reversed).tolist())\
    .fillna('01')
df['Date'] = pd.to_datetime(temp[0].str.cat(temp[1].str.zfill(2))\
                            .str.cat(temp[2].str.zfill(2)), format='%Y%m%d')