如何将一个列表的项目逐个添加到另一个列表?



我有一个CSV文件,其中一些内容如下所示:

name,x,y
N1,30.2356,12.5263
N2,30.2452,12.5300

...然后继续。

这是我尝试的,我从.csv打电话给它们,并分别添加到不同的列表中。

import csv
nn = []
xkoor = []
ykoor = []
coord = []
with open('C:/Users/Mert/Desktop/py/transformation/1.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        nn.append(row[0].split(','))
        xkoor.append(row[1].split(','))
        ykoor.append(row[2].split(','))
j = 1
for i in range(len(xkoor)):
    for j in range(len(ykoor)):

我正在尝试将列表作为:

coord = [30.2356,12.5263],[30.2452,12.5300],....

我不明白该怎么做。有什么想法吗?

csv-reader应在逗号上为您分开行:

import csv
with open('somefile.csv') as fh:
    reader = csv.reader(fh)
    for row in reader:
        print(row)
# outputs
['name', 'x', 'y']
['N1', '30.2356', '12.5263']
['N2', '30.2452', '12.5300 ']

考虑到这一点,如果您只是想循环循环坐标,则可以使用解开包装来获取xy,然后通过附加元素来构建列表:

import csv
coords = []
with open('somefile.csv') as fh:
    reader = csv.reader(fh)
    next(reader) # skips the headers
    for row in reader:
        name, x, y = row
        coords.append((float(x), float(y)))
# then you can iterate over that list like so
for x, y in coords:
    # do something

坐标将看起来像:

[(30.2356, 12.5263), (30.2452, 12.53)]

您不应该自己分开逗号的字符串,因为csv.reader已经为您做了。只需在csv.reader发电机上迭代,然后根据需要解开列:

reader = csv.reader(f)
next(reader)
coord = [[float(x), float(y)] for _, x, y in reader]

似乎您过于复杂的事情。

如果您要做的就是创建仅包含X和Y值的坐标数组,那么这就是您的完成方式:

import csv
coord = []
with open('C:/Users/Mert/Desktop/py/transformation/1.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        rowlist = row.split(',')
        coord.append(rowlist[1:3])
print(coord)

您需要做的就是按每行提取子集,并将其附加到坐标数组中。无需每次调用行分开,或为您的轴创建单独的数组。

k.i.s.s!

(另外,建议 - 将PII置于您的问题之外。无需使用您的整个Windows文件路径,只需指出它是一个CSV文件即可。我不需要知道您的名字就可以回答问题!(

为什么不潘达?!

  • READ_CSV将准备好您的文件并将其转换为DataFrame
  • 迭代在行和访问列x和y
  • 合并列表

,使用

更容易
    import pandas as pd
    df = pd.read_csv('1.csv', header=0)
    [[r.x, r.y] for _, r in df.iterrows()]

结果:

[[30.2356, 12.5263], [30.2452, 12.53]]

我会去做这样的事情:

import csv
# coordinates as strings 
with open('some.csv', 'r') as f:
    cord = [a for _, *a in csv.reader(f)]
# coordinates as floats
with open('some.csv', 'r') as f:
    cord = [[float(x), float(y)] for _, x, y in csv.reader(f)]
[print(xy) for xy in cord]

如果您进入OniLiners:

data = """name,x,y
N1,30.2356,12.5263
N2,30.2452,12.5300"""
coords = [[x,y]
          for line in data.split("n")[1:]
          for _,x,y in [line.split(",")]]
print(coords)

这产生

[['30.2356', '12.5263'], ['30.2452', '12.5300']]

最新更新