将字符串日期时间转换为pandas日期时间

6

我刚开始学习Pandas和Python。我想在我的脚本中进行一些日期时间操作。 我从一个CSV文件中获取的日期时间信息格式如下:01APR2017 6:59

如何将其转换为Pandas日期时间格式?类似于:2017-04-01 06:59:00


这里有一个重复的问题链接,可能会有所帮助。 - gincard
1个回答

10
你可以使用带有参数formatto_datetime函数:
s = pd.Series(['01APR2017 6:59','01APR2017 6:59'])

print (s)
0    01APR2017 6:59
1    01APR2017 6:59
dtype: object

print (pd.to_datetime(s, format='%d%b%Y %H:%M'))
0   2017-04-01 06:59:00
1   2017-04-01 06:59:00
dtype: datetime64[ns]

另一个可能的解决方案是在read_csv中使用date_parser:
import pandas as pd
from pandas.compat import StringIO

temp=u"""date
01APR2017 6:59
01APR2017 6:59"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
parser = lambda x: pd.datetime.strptime(x, '%d%b%Y %H:%M')
df = pd.read_csv(StringIO(temp), parse_dates=[0], date_parser=parser)

print (df)
                 date
0 2017-04-01 06:59:00
1 2017-04-01 06:59:00

print (df.date.dtype)
datetime64[ns]

评论编辑:

如果值无法解析为 datetime,则添加参数 errors='coerce' 将其转换为 NaT

s = pd.Series(['01APR2017 6:59','01APR2017 6:59', 'a'])
print (s)
0    01APR2017 6:59
1    01APR2017 6:59
2                 a
dtype: object

print (pd.to_datetime(s, format='%d%b%Y %H:%M', errors='coerce'))
0   2017-04-01 06:59:00
1   2017-04-01 06:59:00
2                   NaT
dtype: datetime64[ns]

感谢您的快速回复。我尝试了解决方案#1,但是出现了以下错误- ValueError:时间数据“01APR2017 6:59”与格式“%d%b%y%H:%M”不匹配。该CSV列中的某些字段不包含日期,为空白/空缺。 - Sourabh Saxena
嗨 Jezrael,问题似乎是我的列的数据类型为float。怎么将其更改为对象类型? - Sourabh Saxena
使用df['col'] = df['col'].astype(str),但如果数据类似于01APR2017 6:59,它是字符串而不是浮点数。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接