python - 导入 CSV 文件并附加到数组

标签 python arrays csv numpy

我有一个格式如下的 csv 文件:

Image Id,URL,Latitude,Longitude
17609472165,https://farm8.staticflickr.com/7780/17609472165_c44d9b5a0e_q.jpg,48.843226,2.31805
11375512374,https://farm6.staticflickr.com/5494/11375512374_66a4d9af6c_q.jpg,48.844166,2.376
24768920940,https://farm2.staticflickr.com/1571/24768920940_634cc06f43_q.jpg,48.844619,2.395897
9411072065,https://farm8.staticflickr.com/7368/9411072065_5e2083a32e_q.jpg,48.844666,2.3725
9996916356,https://farm3.staticflickr.com/2807/9996916356_640c493020_q.jpg,48.844666,2.3725
24281266199,https://farm2.staticflickr.com/1623/24281266199_bf63e25c23_q.jpg,48.844925,2.389616

我想导入这个文件,并为文件中的每一行附加一个点 lat 和 lon 到一个二维数组。我已经尝试过如下代码,它没有工作(或打印任何东西)并且给出错误“ValueError:除了连接轴之外的所有输入数组维度必须完全匹配”

import numpy

data  = open('dataset_import_noaddress', 'r')
A = []

for line in data:
    fields = line.strip().split(',')
    lat = fields[2]
    lon = fields[3]
    print lat
    print lon
    newrow = [lat, lon]
    A = numpy.vstack([A, newrow])

任何人都可以提出为什么这不起作用,或者更好地提出实现同一目标的更好方法。谢谢!

最佳答案

首先,您通常希望使用 with open(filename, 'r') as ...: 格式。原因之一是如果您遇到错误,该文件将自动关闭。

人们经常使用 csv.reader用于在 Python 中读取 csv 文件(尽管如果您使用的是 Pandas,您也可以使用 pd.read_csv(...) 读取表格)。然后,您需要使用 for line in reader: 遍历阅读器。

您正在获取单个变量并创建中间列表,对每一行使用 numpy.vstack。将所有内容聚合为一个列表,然后对整个列表调用 vstack 会更有效。

A.append(line[2:4]) 从给定行的列表中获取第三项和第四项(例如 [48.843226, 2.31805])并将其附加到更大的列表 A . 您应该首先确保该行在追加之前至少有四个值,并跟踪错误的行。

一旦构建了 A,您就可以调用 vstack。

import csv

with open(filename, 'r') as f:
    A = []
    bad_lines = []
    reader = csv.reader(f)
    for line in reader:
        if len(line) == 4:
            A.append(line[2:4])
        else:
            bad_lines.append(line)
    A = np.vstack(A)

关于python - 导入 CSV 文件并附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848924/

相关文章:

Python数学模块

Python:垃圾收集器是否在引发 MemoryError 之前运行?

javascript - 返回数组中最长的字符串 (JavaScript)

c - 使用 strtok 读取 csv 文件

python - wxPython:如何免除(放弃)空的 CSV 列和行导入 wxGrid

python - Pygame,按下一个键时正好执行 1 次命令,然后等待另一次单击

python - 将函数应用于我的数据框中的所有列

c++ - 大小为零的数组?

ios - Swift - 将数组中的值转换为 double 或 float

ruby - 按另一个数组排序哈希数组