【问题标题】:Appending API results in the existing CSV file in a right format (New header + API results)以正确的格式将 API 结果附加到现有 CSV 文件中(新标头 + API 结果)
【发布时间】:2018-11-02 00:27:16
【问题描述】:

目前我正在处理 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 来解决这个问题。

期望的输出

【问题讨论】:

  • “当前输出”实际上是写入 .csv 文件的内容,还是您的 print(output) 语句中正在打印的内容?因为如果是后者,那只是打印语句中换行的神器
  • 您必须重写整个 .csv,而不仅仅是追加新列。

标签: python api csv


【解决方案1】:

您需要将三个新字段附加到每个,因此您需要将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)

我强烈建议您创建一个文件,不要只覆盖旧文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 2018-02-28
    • 2019-05-01
    • 2018-08-03
    • 2020-04-27
    • 1970-01-01
    相关资源
    最近更新 更多