我输入的CSV具有两个时间戳格式的日期时间列“开始时间”和“结束时间”。

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

无论我是否使用我的自定义日期格式mdb_to_datetime()或将其注释掉。
它们一直是“ np.object”,是“ np.string”的包装。 (此后会炸毁日期算术。)

在read_csv之后尝试在结果的object(string)列上合并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的地方是docbug?

最佳答案

要回答您的问题:

2)自定义日期格式器不必返回np.datetime64,只需使用类似datetime的格式即可(文档说:“将字符串转换为datetime实例”)。因此datetime.datetime没问题,不需要将其转换为字符串。

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

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


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

关于python - pd.read_csv(parse_dates…[date_formatter =])返回dtype'object'而不是'datetime64',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23179897/

10-11 18:53