我想在没有循环的情况下从python中的另一个矩阵中提取一个矩阵

问题描述

我有一个包含我的数据的 excel 文件。就是这个: enter image description here 在读取并将其存储在“数据”变量中后,我想将其分成 2 部分并将它们分配给不同的变量。我的意思是我想从我的数据输入中提取 2 个形状不一致的矩阵。 例如,如果我的数据是我放在这里图片,我想要这两个: enter image description hereenter image description here 我使用了这个索引,但没有用。 这是代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
FilePath='E:\\# Civil Engineering graduate\\Projects\\Python\\RoutePlanning'
FileName='\\Data.xlsx'
Data=pd.read_excel(FilePath+FileName)
print(Data)
Points=np.array(Data[1:,0:3])

这是它通过的错误

Exception has occurred: TypeError
'(slice(1,None,None),slice(0,3,None))' is an invalid key
  File "E:\# Civil Engineering graduate\Projects\Python\RoutePlanning\RoutePlanning.py",line 9,in <module>
    Points=np.array(Data[1:,0:3])

我见过一些解决方案为此使用了循环和函数定义,除非我必须…… 毫无疑问,我在这里建立索引时犯了一个错误,因为它不起作用。但我想知道这是否可以修复并投入使用,或者是否有任何类似解决方案的索引。 如果不是,那么性能最佳的解决方案是什么。

解决方法

这是因为 Data 是一个 Pandas DataFrame,而不是一个 numpy.ndarray

如果您使用 Data.to_numpy()[1:,0:3],它会起作用。

,

我想 Data 是一个数据框,您尝试使用标签位置进行切片。试试iloc

Points=np.array(Data.iloc[1:,0:3])

你可以得到你想要的 numpy 数组,如下所示:

points_left = Data.iloc[1:,:3].to_numpy()
points_right = Data.iloc[1:,3:].to_numpy()
,

谢谢大家。 这个效果很好。但现在是 NaN!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
FilePath='E:\\# Civil Engineering graduate\\Projects\\Python\\RoutePlanning'
FileName='\\Data.xlsx'
Data=pd.read_excel(FilePath+FileName)
Data=np.array(Data)
print(Data)
Points=np.array(Data[:,0:4])
print(Points)
Obstacles=np.array(Data[:,4:9])
print(Obstacles)

我已经得到了我想要的数据: 数据=

[[ 1.  0.  0.  0.  1.  2.  2.  2.  1.]
 [ 2.  5.  5.  5. nan nan nan nan nan]]

点数=

[[1. 0. 0. 0.]
 [2. 5. 5. 5.]]

障碍=

[[ 1.  2.  2.  2.  1.]
 [nan nan nan nan nan]]

现在需要做的就是删除 NaN。 有什么推荐吗?