【问题标题】:numpy delete shape of passed value errornumpy删除传递值错误的形状
【发布时间】:2018-08-11 09:46:57
【问题描述】:

我正在尝试使用 numpy 数据集进行非常简单的删除

dataset = pd.read_csv('putty.log', sep='\s+', header = 0)
badData = np.argwhere(np.isnan(dataset.loc[:,'Temp']))
np.delete(dataset, badData, 0)

但我收到一个错误提示

ValueError: Shape of passed values is (8, 529292), indices imply (8, 536668)

即使我只是这样做

np.delete(dataset, 14, 0)

我明白了

'ValueError: Shape of passed values is (8, 536667), indices imply (8, 536668)'

当然536667应该是新数组的大小,那有​​什么问题呢?

dataset.head(5)
  count           Fx          Fy  ...    AngX    AngY   Temp
0   151  -342818.906  -13860.325  ...    1040  1052.0  176.0
1   152  -342869.781  -13268.041  ...    1039  1051.0  176.0
2   153  -343521.312  -13044.709  ...    1043  1053.0  176.0
3   154  -343697.343  -13502.697  ...    1040  1052.0  176.0
4   155  -343553.468  -13164.850  ...    1040  1052.0  176.0
[5 rows x 8 columns]

【问题讨论】:

  • 您能否使用 dataset.head(5) 添加您的数据集示例?
  • 添加了数据集示例

标签: python numpy del


【解决方案1】:

问题是您尝试在 pandas 数据框中使用 numpy delete。

您可以将数据集转换为 numpy、删除并将其放回数据框,或使用现有的 pandas 函数删除行。

选项 1:转换为 numpy,然后返回数据帧

使用随机值并删除索引 3 行的简单示例

>>> df
      count        Fx        Fy         A         B      AngX      AngY      Temp
0  0.835154  0.399818  0.813946  0.828186  0.418237  0.431655  0.114101  0.686881
1  0.882480  0.363054  0.298512  0.179800  0.689665  0.018929  0.477470  0.088163
2  0.217667  0.511877  0.283514  0.541611  0.748867  0.173256  0.738801  0.359404
3  0.820754  0.598249  0.361888  0.461686  0.027692  0.160760  0.322443  0.687293
4  0.666681  0.423966  0.613454  0.468823  0.171541  0.487825  0.825111  0.413490
>>> np_values = df.values
>>> np_new_values = np.delete(np_values, 3, 0)
>>> df = pd.DataFrame(np_new_values, columns=['count', 'Fx', 'Fy', 'A', 'B', 'AngX', 'AngY', 'Temp'])
>>> df
      count        Fx        Fy         A         B      AngX      AngY      Temp
0  0.835154  0.399818  0.813946  0.828186  0.418237  0.431655  0.114101  0.686881
1  0.882480  0.363054  0.298512  0.179800  0.689665  0.018929  0.477470  0.088163
2  0.217667  0.511877  0.283514  0.541611  0.748867  0.173256  0.738801  0.359404
3  0.666681  0.423966  0.613454  0.468823  0.171541  0.487825  0.825111  0.413490
>>> 

选项 2:过滤数据帧

假设您要删除 Temp 为 Nan 的行。您可以过滤行并创建一个新数据集,就这么简单:

>>> df
      count        Fx        Fy         A         B      AngX      AngY      Temp
0  0.320627  0.757144  0.633840  0.481710  0.553908  0.439086  0.745160  0.022574
1  0.029232  0.285503  0.832308  0.269803  0.367305  0.558367  0.811343       NaN
2  0.311669  0.958565  0.159508  0.642381  0.930498  0.738135  0.255059  0.109702
3  0.576281  0.686696  0.419363  0.914394  0.825495  0.999091  0.126657  0.731871
4  0.323572  0.186353  0.149007  0.436962  0.699664  0.910051  0.118339  0.070458
>>> df[df['Temp'].notnull()]
      count        Fx        Fy         A         B      AngX      AngY      Temp
0  0.320627  0.757144  0.633840  0.481710  0.553908  0.439086  0.745160  0.022574
2  0.311669  0.958565  0.159508  0.642381  0.930498  0.738135  0.255059  0.109702
3  0.576281  0.686696  0.419363  0.914394  0.825495  0.999091  0.126657  0.731871
4  0.323572  0.186353  0.149007  0.436962  0.699664  0.910051  0.118339  0.070458

【讨论】:

  • 太棒了!谢谢@克劳斯。我没有意识到他们不兼容。谢谢你给了我几个选择。在这种情况下,使用 pandas 函数是可行的方法。
猜你喜欢
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2021-02-01
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多