【发布时间】:2018-02-21 20:31:22
【问题描述】:
我有 179 GB 以下稀疏数据:
id lat long var1 var2 var3
1 52.1 0.07 A
2 58.3 5.78 C
3 46.5 -8.32 E
我想读入数据并过滤,以便只保留某些经纬度坐标之间的行。在此表示中,纬度的示例范围是 51.0 到 59.0,经度的范围是 -1.0 到 6.0
到目前为止,我只有一个 CSV 字典阅读器和一个不起作用的字典理解:
with open("test_data.csv", 'r', encoding="Latin-1") as f:
reader = csv.DictReader(f)
rows = [row for row in reader if row['lat'] >= 51.0 if row['lat'] <= 59.0 if row['long'] >= -1.0 if row['long'] <= 6.0]
print(rows)
目前我得到一个 TypeError: Unorderedable types: str() >= int() 这可能是因为 DictReader 将事物作为字符串引入,它们需要是整数值。我不确定如何将 int() 插入到 dict 理解中。
最终,我希望输出选择以下数据:
id lat long var1 var2 var3
1 52.1 0.07 A
2 58.3 5.78 C
我对字典的格式感到矛盾,因为我想在之后将数据写回 csv。
【问题讨论】:
-
你说它“不起作用”是什么意思?
-
我认为这是因为我需要将 lat long 转换为 int,因为 DictReader 将它们作为字符串引入。
-
我不是说 why 不工作,我的意思是 如何 不工作。你有错误吗?输出不正确吗?发生了什么让您认为它“不起作用”?
-
@asongtoruin 我已经修改了问题
-
您应该将它们作为浮点数进行比较,因为没有整数值。您可以使用
float(row['lat'])强制转换为浮动。此外,关于您的标签,您使用的是列表理解,尽管它是一个字典列表。
标签: python dictionary list-comprehension