问题描述
我有一个带有时间列的csv文件,用于存储时间戳。使用vaex.from_csv()方法将此文件转换为hdf5格式后,time列中的值为字符串。例如:
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将时间戳识别为datetime(或np.datetime64)?
解决方法
我认为问题在于,当您将数据从csv转换为hdf5时,数据类型为字符串。我的测试表明,使用日期时间和timedelta数据类型保存和打开hdf5并没有问题。
查看文件名,您可能使用了类似的
df = vaex.read_csv(path_to_csv,convert=True)
在这种情况下,vaex(或大熊猫,因为read_csv
只是pd.read_csv
的包装,并带有一些其他选项)不知道列应该是字符串还是日期时间,因此默认情况下选择字符串,然后将其传播。
使用类似
df = vaex.read_csv(path_to_csv,parse_dates=['my_date_column'],convert=True)
应该可以解决问题。
如果我的假设是错误的,只需在导出到HDF5之前确保所有dtypes符合您的要求即可。