我知道类似的问题已被问过一百万次,但我实际上找不到这个特定的答案,这似乎应该是数据清理中非常常见的情况。
我有一列日期作为字符串,没有填充,采用美式布局,所以 2009 年 2 月 19 日是 2/19/09。
我正在尝试将它们转换为 python pandas 中的日期时间
这是示例数据:
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’不匹配”
请您参考如下方法:
尝试 to_datetime :
df.joined = pd.to_datetime(df.joined)
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
