【问题标题】:pd.read_csv(parse_dates... [date_formatter=]) returns dtype 'object' not 'datetime64'pd.read_csv(parse_dates... [date_formatter=]) 返回 dtype 'object' 而不是 'datetime64'
【发布时间】:2014-06-04 11:38:03
【问题描述】:

我的输入 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 的任何地方?

【问题讨论】:

  • @merlin2011: np.datetime64(mydatestring) 有效(请恢复您已删除的答案!),刚才mdb_to_datetime() 有半英里长。
  • 我放回去了,因为一直在安装pandas,正准备更新。
  • 我删除了后半部分,因为输出值看起来不正确。如果我弄清楚原因会再次更新。 :)

标签: python datetime csv pandas date-formatting


【解决方案1】:

回答您的问题:

2) 自定义日期格式化程序不必返回np.datetime64,只需类似日期时间即可(文档说:'将字符串转换为日期时间实例')。所以datetime.datetime就可以了,不用转成字符串了。

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

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

你也可以使用pandasto_datetime函数:pd.to_datetime(ts, unit='s')

【讨论】:

  • 2) 我提到了为什么日期时间不够足够好:因为日期时间算术失败:cal[(cal['Start Time']>=...) & ... ]。我需要日期时间64。我就是这么说的。
  • 否,但您的数据框中的值将是 datetime64date_parse 只是不需要返回它。
  • 1) 不,这对我来说失败了。正如我所说,cal 中两个日期时间列中的每一个的每个元素最终都作为一个包含 N=5467 个元素的列表。
  • ^^ 我的日期框架中的系列具有 np.object 类型。因此 series 上的日期时间算术失败(上面的示例)。我一直在说这就是 dtype 需要为 datetime64 的原因。
  • 如果您在我编辑时包括对float 的调用?它给出了什么错误?
猜你喜欢
  • 2020-01-06
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2017-04-11
  • 2021-10-04
  • 2019-10-18
相关资源
最近更新 更多