绘制包含NaN的pandas数据帧

ajt*_*ajt 16 data-analysis ipython pandas

我有来自三个不同GPS接收器的冰速GPS数据.数据位于熊猫数据框中,其索引为朱利安日(从2009年开始增量).

这是数据的子集(主数据集是3487235行...):

                    R2          R7         R8
1235.000000 116.321959  100.805197  96.519977
1235.000116 NaN         100.771133  96.234957
1235.000231 NaN         100.584559  97.249262
1235.000347 118.823610  100.169055  96.777833
1235.000463 NaN         99.753551   96.598350
1235.000579 NaN         99.338048   95.283989
1235.000694 113.995003  98.922544   95.154067
Run Code Online (Sandbox Code Playgroud)

数据框具有以下形式:

Index: 6071320 entries, 127.67291667 to 1338.51805556
Data columns:
R2    3487235  non-null values
R7    3875864  non-null values
R8    1092430  non-null values
dtypes: float64(3)

R2以不同的速率对R7和R8进行采样,因此NaNs系统地出现在该间距处.

尝试df.plot()绘制整个数据帧(或其索引行位置)在绘制R7和R8方面工作正常,但不绘制R2.同样,只是做df.R2.plot()也不起作用.绘制R2的唯一方法是做df.R2.dropna().plot(),但这也会删除表示无数据周期的NaN(而不是仅比其他接收器更粗略的采样频率).

还有其他人遇到过这个吗?感谢任何关于这个问题的想法:)

Rut*_*ies 14

你没有看到任何东西的原因是因为默认的情节风格只是一条线.但该线在NaN处被中断,因此只会绘制多个连续值.后者在你的情况下不会发生.您需要更改绘图的样式,这取决于您想要看到的内容.

对于初学者,请尝试添加:

.plot(marker='o')
Run Code Online (Sandbox Code Playgroud)

这应该使所有数据点显示为圆圈.它容易变得杂乱,因此调整标记,边缘颜色等可能是有用的.我没有完全适应Pandas如何使用matplotlib,所以如果情节变得更复杂,我经常会自己切换到matplotlib,例如:

plt.plot(df.R2.index.to_pydatetime(), df.R2, 'o-')
Run Code Online (Sandbox Code Playgroud)


Ed *_*ton 9

假设你想在你有数据的点之间画一条直线,你可以让 Pandas 通过插值来填补空白,然后绘制:

.interpolate(method='linear').plot()
Run Code Online (Sandbox Code Playgroud)