gpt4 book ai didi

python - 读取 CSV 并按列分隔

转载 作者:太空狗 更新时间:2023-10-30 02:22:22 26 4
gpt4 key购买 nike

Python(和一般编程)的新手,如果这很简单和/或在我没有找到的地方回答,请随时以典型的论坛方式骚扰我。

我有一堆 CSV,每个包含 10 个 XY 坐标,如下所示:

10,5
2,4
5,6
7,8
9,12
3,45
2,4
6,5
0,3
5,6

我希望将 X 坐标和 Y 坐标分成两个单独的列表,以便我可以从给定列表中的每个值中减去一个值。例如,从 X 坐标列表中的每个值减去 5,从 Y 坐标列表中的每个值减去 3。然后我将获取每个值的 abs() 并找到最小值。一旦找到这些最小值,我想将列表加在一起,以便将每个值添加到它的对应值

IE) 如果 X 的绝对值类似于

4
5
....

和 Y 类似的东西

6
7
....

我想添加 4 和 6,然后是 5 和 7,等等。

为了把它们分开,我试过了

import csv
filein = open("/path/here")
reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
listofxys.append(row)

Xs = listofxys.pop(0) # to pop all the X's

Ys = listofxys.pop() # to pop all the Y's

但它提供的不是所有前导值,而是第一个 XY 对。我在这里做错了什么?

最终目标是找到离 XY 坐标最近的点,所以如果这样做不好,请随意引导我转向另一个方向。

提前致谢!

最佳答案

值得注意的是你应该尝试使用 the with statement在 Python 中打开文件时。这既更具可读性又删除了文件未关闭的可能性(即使发生异常)。

你的实际问题在于你没有做你想做的事。

reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
listofxys.append(row)

所有这一切都是以非常低效的方式reader = list(csv.reader(filein, skipinitialspace = True))

你想要做的是使用 the zip() builtin获取一对列表并将其变成两个列表。您可以使用星号运算符执行此操作:

import csv

with open("test") as filein:
reader = csv.reader(filein, skipinitialspace = True)
xs, ys = zip(*reader)

print(xs)
print(ys)

给出:

('10', '2', '5', '7', '9', '3', '2', '6', '0', '5')
('5', '4', '6', '8', '12', '45', '4', '5', '3', '6')

请注意这些值是字符串。如果你想把它们作为数字,你会想要使用 csv.QUOTE_NONNUMERIC ,例如:reader = csv.reader(filein, quoting=csv.QUOTE_NONNUMERIC, skipinitialspace = True)

给出:

(10.0, 2.0, 5.0, 7.0, 9.0, 3.0, 2.0, 6.0, 0.0, 5.0)
(5.0, 4.0, 6.0, 8.0, 12.0, 45.0, 4.0, 5.0, 3.0, 6.0)

关于python - 读取 CSV 并按列分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11126012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com