简而言之,这是我的问题:我正在尝试将我的数据(其中包含 np.datetime64 值)写入 csv,然后将它们读回,并希望我的时间不会改变......
正如在许多地方所讨论的,np.datetime64 将所有二进制和 UTC 保存在内存中,但从本地时间读取字符串。
这是我的问题的一个简单示例,此处从 df.to_csv("foo") 保存的 pd.read_csv("foo") 导致更改时间:
In[184]: num = np.datetime64(datetime.datetime.now())
In[185]: num
Out[181]: numpy.datetime64('2015-10-28T19:19:42.408000+0100')
In[186]: df = pd.DataFrame({"Time":[num]})
In[187]: df
Out[183]:
Time
0 2015-10-28 18:19:42.408000
In[188]: df.to_csv("foo")
In[189]: df2=pd.read_csv("foo")
In[190]: df2
Out[186]:
Unnamed: 0 Time
0 0 2015-10-28 18:19:42.408000
In[191]: np.datetime64(df2.Time[0])
Out[187]: numpy.datetime64('2015-10-28T18:19:42.408000+0100')
In[192]: num == np.datetime64(df2.Time[0])
Out[188]: False
(照常:)
import numpy as np
improt pandas as pd
网上有很多问题和大量信息,但我已经在谷歌上搜索了一段时间,但无法找到如何解决这个问题的答案。应该有某种方法可以将数据保存在 Zulu 中,或者假设 UTC 读取它们,但还没有找到任何最好的(甚至是好的?)方法。我可以
In[193]: num == np.datetime64(df2.Time[0]+"Z")
Out[189]: True
但这在我看来真的很糟糕,在实践、可移植性和效率方面......(加上它在使用默认保存和读取时很烦人)