python - 两个列表中对应的float

标签 python python-2.7 csv

我有两个 CSV 文件。
第一个,当被视为列表时,看起来像这样:

('Rubus idaeus', '10.0', '56.0')
('Neckera crispa', '9.8785', '56.803')
('Dicranum polysetum', '9.1919', '56.0456')
('Sphagnum subnitens', '9.1826', '56.6367')
('Taxus baccata', '9.61778', '55.68833')
('Sphagnum papillosum', '9.1879', '56.0442')

列是“物种”、“经度”和“纬度”。 它们是在现场进行的观察。
另一个文件也是 CSV 文件。模拟真实事物的测试。它看起来像这样:

{'y': '58.1', 'x': '22.1', 'temp': '14'}
{'y': '58.2', 'x': '22.2', 'temp': '10'}
{'y': '58.3', 'x': '22.3', 'temp': '1'}
{'y': '58.4', 'x': '22.4', 'temp': '12'}
{'y': '58.5', 'x': '22.5', 'temp': '1'}
{'y': '58.6', 'x': '22.6', 'temp': '6'}
{'y': '58.7', 'x': '22.7', 'temp': '0'}
{'y': '58.8', 'x': '22.8', 'temp': '13'}
{'y': '58.9', 'x': '22.9', 'temp': '7'}

这两个文件确实很长。

我有观察结果,现在我想在包含气候数据的文件中找到最接近的较低数字,然后将该行附加到另一行,因此输出变为:

('Dicranum polysetum', '9.1919', '56.0456', 'y': '9.1', 'x': '56.0', 'temp': '7')

我尝试使用 DictReader 遍历 CSV 文件来创建嵌套循环,但嵌套速度非常快。并且需要大量的循环才能完成整个过程。
有人知道方法吗?

我目前的代码很糟糕,但我尝试了几种循环方式,我预计我的整个方法存在根本性的错误。

import csv
fil = csv.DictReader(open("TestData.csv"), delimiter=';')
navn = "nyDK_OVER_50M.csv"
occu = csv.DictReader(open(navn), delimiter='\t')

for row in fil:
    print 'x=',row['x']
    for line in occu:
        print round(float(line['decimalLongitude']),1)
        if round(float(line['decimalLongitude']),1) == row['x']:
            print 'You did it, found one dam match'

这是我的两个文件的链接,因此您无需编造任何数据,以防您知道可以插入我前进的事情。

https://www.dropbox.com/s/lmstnkq8jl71vcc/nyDK_OVER_50M.csv?dl=0 https://www.dropbox.com/s/v22j61vi9b43j78/TestData.csv?dl=0

最好的问候, 马蒂亚斯

最佳答案

因为你说没有缺失温度数据点,那么解决问题就容易多了:

import csv

# temperatures
fil = csv.DictReader(open("TestData.csv"), delimiter=';')
# species
navn = "nyDK_OVER_50M.csv"
occu = csv.DictReader(open(navn), delimiter='\t')

d = {}
for row in fil:
    x = '{:.1f}'.format(float(row['x']))
    y = '{:.1f}'.format(float(row['y']))
    try:
        d[x][y] = row['temp']
    except KeyError:
        d[x] = {y:row['temp']}

for line in occu:
    x = '{:.1f}'.format(round(float(line['decimalLongitude']),1))
    y = '{:.1f}'.format(round(float(line['decimalLatitude']),1))
    temp = d[x][y]
    line['temp'] = temp
    line['x'] = x
    line['y'] = y
    print(line)

关于python - 两个列表中对应的float,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29781828/

相关文章:

python - Django-rest框架结构不捕获post或put请求

python - NameError : name 'Game' is not defined, 但它是

python - 为什么 Tensorflow 无法计算 reshape 参数的梯度?

python - 如何在更正 if 语句之前打印 X 行

python - “ascii”编解码器无法解码 - 通过 pyodbc 将 CSV 转换为 SQL Server

python - csv 到嵌套的 JSON?

python - 使用 py2exe 将 python 脚本转换为 .exe 时,它​​是否更快?

python - 如何将 python 2.7 中的 bytearray 转换为十进制字符串?

regex - Python正则表达式匹配除最后一次出现之外的所有内容

python - 如何从本地电脑加载多个csv文件