首页 > 解决方案 > 将每个 x 和 y 分开的点数据集转换为点列表

问题描述

所以我有一个如下所示的数据集:

     x0  y0  x1  y1  x2  y2
0     0   5   1   5   1   4
1     1   5   1   4   2   4
2     1   4   2   4   2   3
3     2   4   2   3   3   3
4     2   3   3   3   3   2

我收集到的这个 csv 看起来像这样:

    x0  y0  x1  y1  x2  y2  x5  y5
0   0   5   1   5   1   4   3   3
1   1   5   1   4   2   4   3   2
2   1   4   2   4   2   3   4   2
3   2   4   2   3   3   3   4   1
4   2   3   3   3   3   2   5   1

我需要一个列表,将每一行组合成一个单独的子列表,就像这样:

list = [[[0, 5], [1, 5], [1, 4]], 
        [[1, 5], [1, 4], [2, 4]], ...]

在 StackOverflow 的其余部分,我真的找不到一个简单的方法,我想知道是否有一种简单的方法可以做到这一点。任何帮助表示赞赏!

到目前为止,我所尝试的只是将它转换为一个列表,然后循环遍历它并将每两个项目附加到一个新列表中,如下所示:

path_df = pd.read_csv("data/preprocessed_data.csv", sep="\t", index_col=0)

X_points = path_df[["x0", "y0", "x1", "y1", "x2", "y2"]].values.tolist()

X = []

for x in X_points:
    p1 = [x[0], x[1]]
    p2 = [x[2], x[3]]
    p3 = [x[4], x[5]]
    row = [p1, p2, p3]
    X.append(row)

print(X[:10])

这确实给了我想要的输出,但感觉不是很pythonic

标签: pythonpandas

解决方案


df.to_numpy().reshape(-1,3,2).tolist()

结果:

[[[0, 5], [1, 5], [1, 4]], [[1, 5], [1, 4], [2, 4]], [[1, 4], [2, 4], [2, 3]], [[2, 4], [2, 3], [3, 3]], [[2, 3], [3, 3], [3, 2]]]

推荐阅读