Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从.CSV导入数据,在列中搜索_Python_Csv_Search - Fatal编程技术网

Python 从.CSV导入数据,在列中搜索

Python 从.CSV导入数据,在列中搜索,python,csv,search,Python,Csv,Search,Python版本:3.7.4 专业水平:初学者 我试图从包含四列的.CSV中读取数据:公民号、街道名称、邻居和数据类型(“现有”或“新”)。现有记录的“邻居”字段中填充了地址,新记录为空,需要此信息 我正在尝试读取.csv,并用最近邻居的地址(公民号码+街道名称)填充新记录 到目前为止,我已经能够按列读取数据。现在我不确定下一步该怎么做。我想首先搜索新记录及其相关地址,然后找到最近的邻居并用该地址填充“邻居”字段。任何指示都将不胜感激 数据类似于: “市民编号”、“街道名称”、“邻居”、“数据类

Python版本:3.7.4 专业水平:初学者

我试图从包含四列的.CSV中读取数据:公民号、街道名称、邻居和数据类型(“现有”或“新”)。现有记录的“邻居”字段中填充了地址,新记录为空,需要此信息

我正在尝试读取.csv,并用最近邻居的地址(公民号码+街道名称)填充新记录

到目前为止,我已经能够按列读取数据。现在我不确定下一步该怎么做。我想首先搜索新记录及其相关地址,然后找到最近的邻居并用该地址填充“邻居”字段。任何指示都将不胜感激

数据类似于:

“市民编号”、“街道名称”、“邻居”、“数据类型”
‘10’、‘主街’、‘11主街’、‘现有’
‘40’、‘布鲁克街’、‘无’、‘新’
等
以下是我迄今为止取得的所有成就:

import sys, csv
from collections import defaultdict

columns = defaultdict(list)

with open('Test_Data.csv', 'r') as f:
    reader = csv.DictReader(f)
    for row in reader:
        for (k,v) in row.items():
            columns[k].append(v)

stName = columns['StreetName']
stNum = columns['CivicNum']
Neighbor = columns['Neighbor']
Type = columns['DataType']

print(stName)
print(stNum)
print(Neighbor)
print(Type)

创建一个临时文件,处理后将在其中存储更新的信息。打开原始(用于读取目的)和临时(用于写入目的)文件。在原始数据类型字段设置为“新建”的行中,将相邻字段更新为最接近的值(我已向其添加了1),并创建一个要写入临时字段的新行

from tempfile import NamedTemporaryFile
import shutil
import csv

filename = 'file.csv'
tempfile = NamedTemporaryFile(mode='w', delete=False)

fields = ['Civic Number', 'Street Name', 'Neighbor', 'Data Type']

with open(filename, 'r') as csvfile, tempfile:
    reader = csv.DictReader(csvfile, fieldnames=fields)
    writer = csv.DictWriter(tempfile, fieldnames=fields)

    for row in reader:
        if row['Data Type'] == 'New':
            row['Neighbor'] = str(int(row['Civic Number']) + 1) + ' ' + row['Street Name']
        row = {'Civic Number': row['Civic Number'], 'Street Name': row['Street Name'], 'Neighbor': row['Neighbor'], 'Data Type': 'Existing'}
        writer.writerow(row)

shutil.move(tempfile.name, filename)


没有经度和纬度,你是如何找到接近度的?您可能需要一个第三方API或另一个库,尽管我不知道任何提供此功能的库。通过查找具有匹配街道名称和最接近公民编号的现有记录,可以确定是否具有此功能。所以我想得到同一街道的行,计算绝对值,然后得到min()以找到最近的地址。谢谢!事实上,这很有帮助。@gisele_gis如果这对你有帮助,如果你能批准这个答案,我将不胜感激