将字符串日期时间转换为熊猫日期时间

Posted

技术标签:

【中文标题】将字符串日期时间转换为熊猫日期时间【英文标题】:Convert string date time to pandas datetime 【发布时间】:2017-05-20 23:33:30 【问题描述】:

我是 Pandas 和 Python 的新手。我想在我的脚本中做一些日期时间操作。 我从以下格式的 csv 文件中获取日期时间信息: 01APR2017 6:59

如何将其转换为 pandas 日期时间格式?就像是: 2017-04-01 06:59:00

【问题讨论】:

有一个重复的问题here 很有帮助。 【参考方案1】:

您可以将to_datetime 与参数format 一起使用:

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: time data '01APR2017 6:59' does not match format '%d%b%y %H:%M' 该列 csv 中的某些字段不包含日期并且为空白/空 嗨,Jezrael,问题似乎是我的专栏的 dtype 是浮动的。如何将其更改为对象类型? 使用df['col'] = df['col'].astype(str),但如果数据类似于01APR2017 6:59,它是字符串,而不是浮点数。

以上是关于将字符串日期时间转换为熊猫日期时间的主要内容,如果未能解决你的问题,请参考以下文章

将列字符串转换/解析为日期时间值 - 熊猫

熊猫用字符串转换日期

熊猫用字符串转换日期

如何将日期时间格式转换为分钟 - 熊猫

将熊猫系列时间戳转换为唯一日期列表

将字符串解析为日期时间,同时在熊猫中考虑 AM/PM