【问题标题】:Preserving datetime type when converting from CSV to HDF5 with vaex使用 vaex 从 CSV 转换为 HDF5 时保留日期时间类型
【发布时间】:2021-01-16 02:24:48
【问题描述】:

我有一个 csv 文件,其中包含一个存储时间戳的时间列。使用 vaex.from_csv() 方法将此文件转换为 hdf5 格式后,时间列中的值是字符串。例如:

df = vaex.open("data.csv.hdf5")
time = df["time"].values[0]
print(time)
print(type(time))

输出是:

2020-09-30 01:02:03
<class 'str'>

我已尝试将时间戳格式化为 ISO 8601,并使用/不使用引号进行存储。结果是一样的。 从 csv 转换为 hdf5 时,是否有某种方法可以强制 vaex 将时间戳识别为日期时间(或 np.datetime64)?

【问题讨论】:

    标签: python csv hdf5 vaex


    【解决方案1】:

    我认为问题在于,当您将数据从 csv 转换为 hdf5 时,数据类型是字符串。我的测试显示保存和打开具有 datetime 和 timedelta 数据类型的 hdf5 没有问题。

    查看文件名,您可能使用了类似

    df = vaex.read_csv(path_to_csv, convert=True)
    

    在这种情况下,vaex(或 pandas,因为 read_csv 只是带​​有一些额外选项的 pd.read_csv 的包装)不知道列应该是字符串还是日期时间,所以默认情况下它选择字符串,并且然后传播。

    使用类似的东西

    df = vaex.read_csv(path_to_csv, parse_dates=['my_date_column'], convert=True)
    

    应该可以解决问题。

    如果我对此的假设是错误的,那么在导出到 HDF5 之前确保所有 dtypes 都是你想要的。

    【讨论】:

    • 谢谢 - 实际上,我使用了 vaex.from_csv(),但它仍然适用于 parse_dates
    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多