numpy删除传递值错误的形状

时间:2018-08-11 09:46:58

标签: python numpy del

我正在尝试使用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]

1 个答案:

答案 0 :(得分:0)

问题是您试图在熊猫数据框中使用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