簡體   English   中英

追加API會以正確的格式將現有的CSV文件添加到新的CSV文件中(新標頭+ API結果)

[英]Appending API results in the existing CSV file in a right format (New header + API results)

目前,我正在處理50,000行CSV表。 這是我在API中輸入的示例CSV表:

我的輸入

在此處輸入圖片說明

然后,API處理每一行中的地址,並給我相應的坐標(緯度和經度)

我的問題是我需要在現有表中附加這些新的標題和值。 (在行中說[22])

這是下面的我的Python查詢:

Python查詢

import requests
import json
import pandas as pd
import numpy as np
import csv
import sys
from geocodio import GeocodioClient
import re

client = GeocodioClient('506be11563600404eb83151e40bb0f11ef06f3b')


# Input - CSV


df=pd.read_csv(r"C:\users\testu\documents\travis_50000_melissa_joined_dropna - Copy2.csv",delimiter=',', na_values="nan")


with open(r"C:\users\testu\documents\travis_50000_melissa_joined_dropna - Copy2.csv", 'a', newline='') as fp:
   fieldnames = ["latitude","longitude","coordinates"]
   writer = csv.DictWriter(fp, fieldnames=fieldnames)
   writer.writeheader()

   # Iterating requests for each row
   for row in df.itertuples():
        output = client.geocode(str(row.addressline1) + ', ' + str(row.city) + ', ' + str(row.state) + ', ' + str(row.postalcode)).coords
        cord = '(' + str(output[0]) + ', '+ str(output[1]) + ')'

        writer.writerow({'latitude': output[0], 'longitude': output[1], 'coordinates': cord})
        print(output)

如下圖所示,我將在新行中獲取API結果。

我目前的輸出

在此處輸入圖片說明

如何獲得所需的CSV輸出,如下圖所示?

注意:請不要熊貓! 我需要使用CSVwriter解決此問題。

所需的輸出

在此處輸入圖片說明

您需要將三個新字段追加到每一 ,因此需要將row與這三個新字段合並。 這在Pandas中會有些混亂,因此請允許我使用csv模塊重新定義pd.read_csv()

import csv

with open("test.csv") as in_file, open("test_out.csv", "w") as out_file:
    csv_in = csv.DictReader(in_file, delimiter=",")
    headers = csv_in.fieldnames + ["lat", "lon", "coord"]
    csv_out = csv.DictWriter(out_file, fieldnames=headers)
    csv_out.writeheader()
    for row in csv_in:
        output = client.geocode("{}, {}, {}, {}".format(
            row["addressline1"],
            row["city"],
            row["state"],
            row["postalcode"]
        ))
        row["lat"] = output[0]
        row["lon"] = output[1]
        row["coord"] = "({} {})".format(output[0], output[1])
        csv_out.writerow(row)

我強烈建議您創建一個文件,而不僅僅是覆蓋舊文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM