【问题标题】:I want to extract a matrix out of another matrix in python without loop我想在没有循环的python中从另一个矩阵中提取一个矩阵
【发布时间】:2021-06-04 07:33:13
【问题描述】:

我有一个包含我的数据的 excel 文件。就是这个: enter image description here 在读取并将其存储在“数据”变量中之后,我想将其分成两部分并将它们中的每一个分配给不同的变量。我的意思是我想从我的数据输入中提取 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])

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

【问题讨论】:

  • 请提供示例数据框,以便我们更好地帮助您

标签: python pandas numpy indexing data-structures


【解决方案1】:

这是因为 Data 是 pandas DataFrame,而不是 numpy.ndarray

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

【讨论】:

    【解决方案2】:

    我想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()
    

    【讨论】:

    • 我编辑了提取照片中所需数据的答案。
    • 非常感谢,它成功了。但我使用了这段代码,它是正确的:Data=np.array(Data)
    • 只要你得到你正在寻找的数据,就可以了。祝你好运!如果我的回答对您也有帮助,请将其标记为有效答案。
    【解决方案3】:

    谢谢大家。 这个工作得很好。但是现在是 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。 有什么建议吗?

    【讨论】:

    • 我建议您为后续问题打开一个新问题。但快速提示:这是因为您正在加载的表格中的某些字段为空。原则上你可以使用described here
    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多