将未添加的m/d/y格式的日期转换为python格式的日期时间
我知道类似的问题已经被问了一百万次,但我实际上找不到这个特定的答案,这似乎是数据清理中非常常见的情况 我有一列日期字符串,没有填充,是美式布局,所以2009年2月19日是2009年2月19日 我正在尝试将它们转换为python中的datetime 以下是示例数据:将未添加的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
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())
?你经常是某人最喜欢的人,因为你现在是我最喜欢的人。