我在转换日期时间列时遇到这个奇怪的错误。
这是令人讨厌的代码行:
data['date'] = data['datetime'].map(lambda x:datetime.utcfromtimestamp(x/1000))
为了使事情更有趣,这有效:
datetime.utcfromtimestamp(data.datetime.max()/1000)
因此可以转换最大值,但对于某些其他值,我得到的值太大而无法定义数据类型错误。
感谢您的帮助!
答案 0 :(得分:3)
在熊猫中,我们可以这样做:
data['date'] = data['datetime'].astype(np.int64) // 10**9
从1970-01-01 00:00:00 UTC开始为我们提供了一些秒。
如果您希望/需要获得毫秒的#:
data['date'] = data['datetime'].astype(np.int64) // 10**6
演示:
In [15]: data = pd.DataFrame({'datetime':pd.date_range('2000-01-01', freq='99D', periods=10)})
In [16]: data
Out[16]:
datetime
0 2000-01-01
1 2000-04-09
2 2000-07-17
3 2000-10-24
4 2001-01-31
5 2001-05-10
6 2001-08-17
7 2001-11-24
8 2002-03-03
9 2002-06-10
In [17]: data['date'] = data['datetime'].astype(np.int64) // 10**9
In [18]: data
Out[18]:
datetime date
0 2000-01-01 946684800
1 2000-04-09 955238400
2 2000-07-17 963792000
3 2000-10-24 972345600
4 2001-01-31 980899200
5 2001-05-10 989452800
6 2001-08-17 998006400
7 2001-11-24 1006560000
8 2002-03-03 1015113600
9 2002-06-10 1023667200
答案 1 :(得分:0)
您的数据帧中可能有一个NaN-不会捕获使用NaN的计算(如在x / 1000中),但是当尝试将其转换为日期时间对象时,它将引发Value Too Large错误。当您在数据框上调用max时,它不会返回NaN,这就是在这种情况下它可以工作的原因。