pd.read_csv(parse_dates ... [date_formatter =])返回dtype'object'而不是'datetime64'

时间:2014-04-20 08:09:34

标签: python datetime csv pandas date-formatting

我的输入CSV有两个日期时间列'开始时间','结束时间',采用时间戳格式。

我可以解析时间戳确定但我无法将结果列设为 datetime64 ?!

无论我是否使用自定义日期格式化程序mdb_to_datetime()或将其注释掉。 它们一直是'np.object',它是'np.string'的包装器。 (这会在以后爆发日期算术。)

在read_csv也失败后,尝试在结果对象(字符串)列上插入cal['Start Time'].astype(np.datetime64)

from datetime import datetime

def mdb_to_datetime(ts):
    """Convert Access MDB to datetime"""
    return datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M')

cal = pd.read_csv('my.csv', header=0,
    usecols = ['Start Time','End Time','Summary'],
    parse_dates = ['Start Time','End Time'] )
    #, date_parser = mdb_to_datetime )

# my.csv looks like (uninteresting columns removed):
Start Time,End Time,Summary
"1209396600","1209429000","some event"
"1226163600","1226206800","another event"

附录: 1)感谢@ merlin2011,现在这似乎做了我需要的,但任何人都可以缩短这一行吗?

def mdb_to_datetime(ts):
    return np.datetime64(datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M'))

2)有没有其他人认为这是一个文档,文档没有告诉你任何地方自定义日期格式化程序应该返回np.datetime64

1 个答案:

答案 0 :(得分:0)

回答你的问题:

2)自定义日期格式化程序不必返回np.datetime64,只需与日期时间一样好(文档说:'将字符串转换为日期时间实例')。所以datetime.datetime没问题,也没有必要将它转换为字符串。

1)答案也是第一,您可以通过离开strftime来缩短它:

def mdb_to_datetime(ts):
    return datetime.fromtimestamp(float(ts))

您还可以使用pandas to_datetime函数:pd.to_datetime(ts, unit='s')