值错误:散点要求x列为numeri

2024-10-01 11:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下测向:

EscRF_P2P_Volt_V    ContextID   StepID  Time_Elapsed    iso_forest
12.4542121887207    7289972 15  32.472  1
27.1062278747559    7289972 15  33.444  1
622.710632324219    7289972 19  37.503  -1
622.710632324219    7289972 19  38.513000000000005  -1
622.710632324219    7289972 19  39.503  -1
622.710632324219    7289972 19  40.503  -1
622.710632324219    7289972 19  41.503  -1
622.710632324219    7289972 19  42.503  -1
622.710632324219    7289972 19  43.503  -1
622.710632324219    7289972 19  44.503  -1
622.710632324219    7289972 19  45.532000000000004  -1
622.710632324219    7289972 19  46.502  -1
622.710632324219    7289972 19  47.501000000000005  -1
622.710632324219    7289972 19  48.501000000000005  -1
622.710632324219    7289972 19  49.501000000000005  -1
622.710632324219    7289972 19  50.501000000000005  -1
622.710632324219    7289972 19  51.501000000000005  -1
622.710632324219    7289972 19  52.501000000000005  -1
622.710632324219    7289972 19  53.502  -1
23.4432239532471    7289973 24  102.49000000000001  1
23.4432239532471    7289973 24  104.078 1
22.7106227874756    7289973 24  104.92800000000001  1
23.4432239532471    7289973 24  105.81800000000001  1
23.4432239532471    7289973 24  106.918 1
22.7106227874756    7289973 24  107.61000000000001  1
23.4432239532471    7289973 24  108.65  1
23.4432239532471    7289973 24  108.73100000000001  1
23.4432239532471    7289973 24  109.19800000000001  1
23.4432239532471    7289973 24  110.12  1
23.4432239532471    7289973 24  111.11000000000001  1
23.4432239532471    7289973 24  112.108 1
22.7106227874756    7289973 24  113.11000000000001  1
21.97802162170409   7289973 24  114.11000000000001  -1
22.7106227874756    7289973 24  115.11000000000001  1
23.4432239532471    7289973 24  116.11000000000001  1
22.7106227874756    7289973 24  117.18  1
23.4432239532471    7289973 24  118.13000000000001  1
23.4432239532471    7289973 24  119.13000000000001  1

ContextID是一个产品,我有1400个不同的contextId,这意味着我有1400个不同的产品。我试图在一个窗口中同时重叠和绘制200个不同的contextId,在第二个窗口中同时绘制200个不同的contextId,依此类推。最后,我得到了7个窗口,1400个产品。为了达到同样的效果,我编写了以下代码:

^{pr2}$

当我这么做的时候

Epvv['plot_data'] = Epvv['merged_df']
for i, fig in enumerate(group_plots(Epvv['plot_data'], 'EscRF_P2P_Volt_V')):
    show()

对于上述测向,它给出了以下错误:

    for i, fig in enumerate(group_plots(Epvv['plot_data'], 'EscRF_P2P_Volt_V')):
    show()
Traceback (most recent call last):

  File "<ipython-input-10-cdcfbb39cc21>", line 1, in <module>
    for i, fig in enumerate(group_plots(Epvv['plot_data'], 'EscRF_P2P_Volt_V')):

  File "<ipython-input-1-b8732ccafe84>", line 46, in group_plots
    add_to_axes(ax, data, param, context_id)

  File "<ipython-input-1-b8732ccafe84>", line 39, in add_to_axes
    data[outlier].plot.scatter(x = "Time_Elapsed", y = param, color = "red", ax = ax)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 3516, in scatter
    return self(kind='scatter', x=x, y=y, c=c, s=s, **kwds)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 2942, in __call__
    sort_columns=sort_columns, **kwds)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 1973, in plot_frame
    **kwds)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 1740, in _plot
    kind=kind, **kwds)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 860, in __init__
    super(ScatterPlot, self).__init__(data, x, y, s=s, **kwargs)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\plotting\_core.py", line 804, in __init__
    raise ValueError(self._kind + ' requires x column to be numeric')

ValueError: scatter requires x column to be numeric

但是,当我对第二个测向应用同样的方法时

BacksGas_Flow_sccm  ContextID   StepID  Time_Elapsed    iso_forest
1.953125    7289972 1   0.0 1
1.953125    7289972 1   0.055   1
2.05078125  7289972 2   0.156   -1
2.05078125  7289972 2   0.48700000000000004 -1
2.05078125  7289972 2   1.477   -1
1.953125    7289972 2   2.4770000000000003  1
1.7578125   7289972 2   3.4770000000000003  1
1.7578125   7289972 2   4.487   1
1.85546875  7289972 2   5.993   1
1.7578125   7289972 2   6.545000000000001   1
9.08203125  7289972 5   7.9830000000000005  -1
46.6796875  7289972 5   13.093  1
46.6796875  7289972 5   13.384  1
46.6796875  7289972 5   14.388000000000002  1
46.6796875  7289972 5   15.386000000000001  1
46.6796875  7289972 5   16.386000000000003  1
46.6796875  7289972 5   17.396  1
46.6796875  7289972 5   18.406000000000002  1
46.6796875  7289972 5   19.396  1
74.12109375 7289973 19  98.89800000000001   1
74.12109375 7289973 19  99.59800000000001   1
74.12109375 7289973 19  100.488 1
74.90234375 7289973 19  101.798 1
6.4453125   7289973 24  102.49000000000001  -1
3.515625    7289973 24  104.078 -1
2.5390625   7289973 24  104.92800000000001  -1
2.05078125  7289973 24  105.81800000000001  1
2.05078125  7289973 24  106.918 1
2.05078125  7289973 24  107.61000000000001  1
1.953125    7289973 24  108.65  1

然后去做

Bgf['plot_data'] = Bgf['merged_df']
for i, fig in enumerate(group_plots(Bgf['plot_data'], 'BacksGas_Flow_sccm')):
    show()

它工作得非常好,没有任何错误,它给了我7个不同的窗口,每个窗口都有200个不同产品的时间图。在

我还检查了两个数据帧的数据类型,它们是相同的:

print(Bgf['plot_data'].dtypes)
BacksGas_Flow_sccm    float64
ContextID              object
StepID                 object
Time_Elapsed          float64
iso_forest             object
dtype: object

print(Epvv['plot_data'].dtypes)
EscRF_P2P_Volt_V    float64
ContextID            object
StepID               object
Time_Elapsed        float64
iso_forest           object
dtype: object

我不明白我在这里犯的错误是什么,因为代码是为一个df工作而不是为另一个df工作。任何帮助都将不胜感激。在

谢谢


Tags: indataobjectplotlibpackageslinesite
1条回答
网友
1楼 · 发布于 2024-10-01 11:26:54

请使用matplotlibscatter图来尝试以下替代方案。似乎有一个相关的open issue

def add_to_axes(ax, data, param, context_id = None):
    data.plot(x = "Time_Elapsed", y = param, label = context_id, ax = ax)
    outlier = data["iso_forest"] == -1
    xvals = data[~outlier]["Time_Elapsed"].values
    yvals = data[~outlier][param].values
    ax.scatter(xvals, yvals, color = "green",)

    xvals = data[outlier]["Time_Elapsed"].values
    yvals = data[outlier][param].values
    ax.scatter(xvals, yvals, color = "red")

 work

或者,您可以跳过scatter图,只需尝试使用带有标记的plot

^{pr2}$

相关问题 更多 >