【问题标题】:NumPy TypeError: only integer scalar arrays can be converted to a scalar indexNumPy TypeError:只有整数标量数组可以转换为标量索引
【发布时间】:2021-10-31 06:39:24
【问题描述】:

我想通过将physiological 类附加到linnerud 数据来创建linnerud_df 数据框。

import numpy as np
import seaborn as sns; sns.set(style="ticks", color_codes=True)
import sklearn.datasets
import pandas as pd

linnerud = sklearn.datasets.load_linnerud()
linnerud_df = pd.DataFrame(
 data= np.c_[linnerud.data, [linnerud.target_names[v] for v in linnerud.target]],
 columns= linnerud.feature_names + ['physiological'])
cols = linnerud_df.columns.drop('physiological')
linnerud_df[cols] = linnerud_df[cols].apply(pd.to_numeric)
g = sns.pairplot(linnerud_df, hue='physiological')

错误:

TypeError                                 Traceback (most recent call

last) <ipython-input-137-aa5a883812a9> in <module>
      1 linnerud = sklearn.datasets.load_linnerud()
      2 linnerud_df = pd.DataFrame(
----> 3  data= np.c_[linnerud.data, [linnerud.target_names[v] for v in linnerud.target]],
      4  columns= list(linnerud.feature_names).append('physiological'))
      5 cols = linnerud_df.columns.drop('physiological')

<ipython-input-137-aa5a883812a9> in <listcomp>(.0)
      1 linnerud = sklearn.datasets.load_linnerud()
      2 linnerud_df = pd.DataFrame(
----> 3  data= np.c_[linnerud.data, [linnerud.target_names[v] for v in linnerud.target]],
      4  columns= list(linnerud.feature_names).append('physiological'))
      5 cols = linnerud_df.columns.drop('physiological')

TypeError: only integer scalar arrays can be converted to a scalar index

【问题讨论】:

  • 分别测试 np.c_ 的 2 个参数以查看导致错误的原因。如果是第二个,确定linnerun.target_names 是什么,linnerud.target 是什么(尤其是它的元素)。在其他情况下,请自己进行一些调试。不要指望我们猜测linnerud中的内容

标签: python pandas numpy scikit-learn


【解决方案1】:
In [2]: import sklearn.datasets
In [3]: linnerud = sklearn.datasets.load_linnerud()

In [5]: linnerud.target_names
Out[5]: ['Weight', 'Waist', 'Pulse']
In [6]: linnerud.target
Out[6]: 
array([[191.,  36.,  50.],
       [189.,  37.,  52.],
       [193.,  38.,  58.],
       [162.,  35.,  62.],
       [189.,  35.,  46.],
       [182.,  36.,  56.],
       [211.,  38.,  56.],
       [167.,  34.,  60.],
       [176.,  31.,  74.],
       [154.,  33.,  56.],
       [169.,  34.,  50.],
       [166.,  33.,  52.],
       [154.,  34.,  64.],
       [247.,  46.,  50.],
       [193.,  36.,  46.],
       [202.,  37.,  62.],
       [176.,  37.,  54.],
       [157.,  32.,  52.],
       [156.,  33.,  54.],
       [138.,  33.,  68.]])

target_names 是一个列表,因此只能通过标量、整数进行索引。 target 是一个二维数组,所以v 是一个形状为 (3,) 的一维数组。它不能用于索引名称。

In [7]: linnerud.keys()
Out[7]: dict_keys(['data', 'feature_names', 'target', 'target_names', 'frame', 'DESCR', 'data_filename', 'target_filename'])

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 2021-07-15
    • 2018-12-02
    • 2021-01-27
    • 2019-04-26
    • 2017-12-15
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多