Python int太大,无法转换为C长日期

Python int太大,无法转换为C长日期,python,python-3.x,pandas,matplotlib,windows-10,Python,Python 3.x,Pandas,Matplotlib,Windows 10,我已经合并了两个数据集,按照本文公认的答案中所示的方法查找最近的时间戳: 但是,当我尝试打印结果时,我遇到了错误: `<matplotlib.collections.LineCollection at 0x2975a3547b8>Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\formatters.py", line 332, in _

我已经合并了两个数据集,按照本文公认的答案中所示的方法查找最近的时间戳:

但是,当我尝试打印结果时,我遇到了错误:

`<matplotlib.collections.LineCollection at 0x2975a3547b8>Traceback (most recent call last):

File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\formatters.py", line 332, in __call__
return printer(obj)

File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\pylabtools.py", line 237, in <lambda>
png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))

File "C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\pylabtools.py", line 121, in print_figure
fig.canvas.print_figure(bytes_io, **kw)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 2208, in print_figure
**kwargs)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 507, in print_png
FigureCanvasAgg.draw(self)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py", line 430, in draw
self.figure.draw(self.renderer)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1295, in draw
renderer, self, artists, self.suppressComposite)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axes\_base.py", line 2399, in draw
mimage._draw_list_compositing_images(renderer, self, artists)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\image.py", line 138, in _draw_list_compositing_images
a.draw(renderer)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axis.py", line 1133, in draw
ticks_to_draw = self._update_ticks(renderer)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axis.py", line 974, in _update_ticks
tick_tups = list(self.iter_ticks())

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\axis.py", line 917, in iter_ticks
majorLocs = self.major.locator()

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\dates.py", line 1054, in __call__
self.refresh()

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\dates.py", line 1074, in refresh
dmin, dmax = self.viewlim_to_dt()

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\dates.py", line 832, in viewlim_to_dt
return num2date(vmin, self.tz), num2date(vmax, self.tz)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\dates.py", line 441, in num2date
return _from_ordinalf(x, tz)

File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\dates.py", line 256, in _from_ordinalf
dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC)

OverflowError: Python int too large to convert to C long
我的代码如下所示:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.io.netcdf as netcdf

readcsv = pd.read_csv(filename,parse_dates={'timestamp':['date','time']},index_col=['timestamp'])

# round off times to the nearest second
log_time = readcsv.index.round('1s')

fh = netcdf.netcdf_file(nc, mmap=False)
cm_time = fh.variables['time'][:]
ref_time = pd.datetime(year=2017, month=6, day=25, hour=10, minute=30, second=35) # Reference time
cm_time_2 = [ref_time + pd.Timedelta(minutes=np.float(i)) for i in cm_time] # Add seconds to reference time
cm_time_3 = pd.to_datetime(cm_time_2)

idx = np.searchsorted(log_time, cm_time_3) - 1
mask = idx >= 0
df = pd.DataFrame({"log_time_1":log_time[idx][mask], "cm_time_4":cm_time_3[mask]}) 

# Plot
plt.figure(figsize=(18, 4))
plt.vlines(pd.Series(log_time),0,1,colors="g")
plt.vlines(df.log_time_1, 0.3, 0.7, colors="r", lw=2)
plt.vlines(df.cm_time_4, 0.3, 0.7, colors="b", lw=2)
我正在windows 10上使用python 3.6

我如何解决错误


非常感谢

熊猫的日期时间大小是64位。这允许使用分辨率高达纳秒(默认值)的日期时间。但是,matplotlib使用python datetime模块,该模块仅适用于具有毫秒分辨率且存储为32位的日期时间。当matplotlib尝试处理日期时,它会将日期转换为内置的python日期时间。此转换无法正常工作并引发异常

因此,您需要将日期时间转换为32位表示形式。修改打印代码,如下所示:

from datetime import datetime

log_time_py = [datetime.fromtimestamp(dt.timestamp()) for dt in log_time]
log_time_1_py = [datetime.fromtimestamp(dt.timestamp()) for dt in df.log_time_1]
cm_time_4_py = [datetime.fromtimestamp(dt.timestamp()) for dt in df.cm_time_4]

# Plot
plt.figure(figsize=(18, 4))
plt.vlines(log_time_py,0,1,colors="g")
plt.vlines(log_time_1_py, 0.3, 0.7, colors="r", lw=2)
plt.vlines(cm_time_4_py, 0.3, 0.7, colors="b", lw=2)

这是matplotlib和熊猫之间的问题

plt.vlines(df.log_time_1.index.to_datetime(), 0.3, 0.7, colors="r", lw=2)
plt.vlines(df.cm_time_4.index.to_datetime(), 0.3, 0.7, colors="b", lw=2)
不推荐使用to_datetime。使用pd。建议使用日期时间(…)

看到和


而且这是一个困扰我很长时间的问题,也是我无法解决的问题(即使有上述建议)。为了记录在案,我正在用色条绘制时间序列散点图

为了绘制这些绘图,我必须升级到
matplotlib 2.1.0
,然后将
datetime64[ns]
转换为
ndarray
,如下所示:

x = df['datecolumn'].values
然后我就可以直接策划:

cm = plt.cm.get_cmap('RdYlBu')
sc = plt.scatter(x, y, c=z, vmin=df['z'].min(), vmax=df['z'].max(), 
s=2, cmap=cm)
plt.colorbar(sc)

还有更多的错误消息,一个行号吗?@ShpielMeister iv添加了整个错误消息,我希望这会有所帮助。错误是否立即发生,您是否执行
plt.vlines(df.cm\u time\u 4,0.3,0.7,colors=“b”,lw=2)
@ShpielMeister所有绘图都出现错误,Iv分别尝试了所有绘图并获得相同的错误。测线预期“标量或1D数组类似x索引,用于绘制测线。”
cm\u-time\u 4
log\u-time\u 1
。格式可能不正确。
cm = plt.cm.get_cmap('RdYlBu')
sc = plt.scatter(x, y, c=z, vmin=df['z'].min(), vmax=df['z'].max(), 
s=2, cmap=cm)
plt.colorbar(sc)