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



我的输入CSV有两个日期时间列时间戳格式的"开始时间"one_answers"结束时间"

我可以解析时间戳,但无法将结果列设置为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是一个文档错误吗?

回答您的问题:

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')

相关内容

  • 没有找到相关文章

最新更新