将未添加的m/d/y格式的日期转换为python格式的日期时间

将未添加的m/d/y格式的日期转换为python格式的日期时间,python,datetime,pandas,Python,Datetime,Pandas,我知道类似的问题已经被问了一百万次,但我实际上找不到这个特定的答案,这似乎是数据清理中非常常见的情况 我有一列日期字符串,没有填充,是美式布局,所以2009年2月19日是2009年2月19日 我正在尝试将它们转换为python中的datetime 以下是示例数据: member state country zip joined . pet 16081 NY UNITED STATES 11215 9/4/09 . par

我知道类似的问题已经被问了一百万次,但我实际上找不到这个特定的答案,这似乎是数据清理中非常常见的情况

我有一列日期字符串,没有填充,是美式布局,所以2009年2月19日是2009年2月19日

我正在尝试将它们转换为python中的datetime

以下是示例数据:

member  state   country         zip         joined .   pet
16081   NY      UNITED STATES   11215       9/4/09 .   parrot
21186   NY      UNITED STATES   5325        8/9/11 .   crunchyfrog
34999   NY      UNITED STATES   11218       11/4/16    lumberjack
34999   NY      FOOBAR STATES   NaN         11/4/16    blind bat
5033    NY      UNITED STATES   11238-1630  11/7/16    norwegianblue
35079   NY      FOOBAR STATES   SW4 9JX     11/13/16 . spanishinq   
35084   NY      UNITED STATES   11217-2181  11/14/16 . spam
我最近的一次尝试是

for x in df['joined']:
    x = dt.strptime(x, '%m/%d/%Y')
返回的“时间数据'2/16/09'与格式'%m/%d/%Y'不匹配”

请尝试:

如有必要,您还可以指定
格式

df.joined = pd.to_datetime(df.joined, format='%m/%d/%y')
print (df)
   member state        country         zip     joined            pet
0   16081    NY  UNITED STATES       11215 2009-09-04         parrot
1   21186    NY  UNITED STATES        5325 2011-08-09    crunchyfrog
2   34999    NY  UNITED STATES       11218 2016-11-04     lumberjack
3   34999    NY  FOOBAR STATES         NaN 2016-11-04      blind bat
4    5033    NY  UNITED STATES  11238-1630 2016-11-07  norwegianblue
5   35079    NY  FOOBAR STATES     SW4 9JX 2016-11-13      panishinq
6   35084    NY  UNITED STATES  11217-2181 2016-11-14           spam
尝试:

如有必要,您还可以指定
格式

df.joined = pd.to_datetime(df.joined, format='%m/%d/%y')
print (df)
   member state        country         zip     joined            pet
0   16081    NY  UNITED STATES       11215 2009-09-04         parrot
1   21186    NY  UNITED STATES        5325 2011-08-09    crunchyfrog
2   34999    NY  UNITED STATES       11218 2016-11-04     lumberjack
3   34999    NY  FOOBAR STATES         NaN 2016-11-04      blind bat
4    5033    NY  UNITED STATES  11238-1630 2016-11-07  norwegianblue
5   35079    NY  FOOBAR STATES     SW4 9JX 2016-11-13      panishinq
6   35084    NY  UNITED STATES  11217-2181 2016-11-14           spam
“时间数据'2/16/09'与格式'%m/%d/%Y'不匹配”

因为您使用的是
%Y
而不是
%Y

%y - Year without century as a zero-padded decimal number.
%Y - Year with century as a decimal number.
“时间数据'2/16/09'与格式'%m/%d/%Y'不匹配”

因为您使用的是
%Y
而不是
%Y

%y - Year without century as a zero-padded decimal number.
%Y - Year with century as a decimal number.

您的错误是由于%Y代表yyyy而不是yy。尝试使用:

dt.strptime(x, '%m/%d/%y')
将此应用于整个列的最简单方法是使用apply函数:

df.joined = df.joined.apply(lambda x: dt.strptime(x, '%m/%d/%y'))

您的错误是由于%Y代表yyyy而不是yy。尝试使用:

dt.strptime(x, '%m/%d/%y')
将此应用于整个列的最简单方法是使用apply函数:

df.joined = df.joined.apply(lambda x: dt.strptime(x, '%m/%d/%y'))


我原以为拥有资本会让我的产出达到四位数(我现在觉得这太傻了,不敢问)。谢谢在这之后,它们实际上仍然是字符串。这应该可以做到,尽管耶兹雷尔已经给出了一个可行的答案,我想:)我认为拥有资本会让我的产出达到四位数(我现在觉得这太愚蠢了,不敢问)。谢谢在这之后,它们实际上仍然是字符串。这应该可以做到,尽管耶兹雷尔已经给出了一个可行的答案,我想:)我认为拥有资本会让我的产出达到四位数(我现在觉得这太愚蠢了,不敢问)。谢谢不幸的是,改成小写。大写字母仍然给我留下了字符串。我原以为拥有大写字母会让我得到输出中的四位数(我现在觉得这太傻了,不敢问)。谢谢不幸的是,改成小写。大写字母仍然给我留下了字符串。我原以为拥有大写字母会让我得到输出中的四位数(我现在觉得这太傻了,不敢问)。谢谢您需要将转换后的日期时间分配回dataframe?这会给我一个列表:numpy.datetime64('2002-07-17T00:00:00.000000000'),我想我现在会将其转换为一种更接近我开始使用的格式,但会被识别为日期。所以现在它工作得很好?或者需要将列
joined
转换为
日期列表
-
打印(df.joined.dt.date.tolist())
?你经常是某人最喜欢的人吗,因为你现在是我最喜欢的人。我原以为拥有大写字母会让我在输出中得到四位数(我现在觉得太傻了,不敢问)。谢谢您需要将转换后的日期时间分配回dataframe?这会给我一个列表:numpy.datetime64('2002-07-17T00:00:00.000000000'),我想我现在会将其转换为一种更接近我开始使用的格式,但会被识别为日期。所以现在它工作得很好?或者需要将列
joined
转换为
日期列表
-
打印(df.joined.dt.date.tolist())
?你经常是某人最喜欢的人,因为你现在是我最喜欢的人。