es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo leer un archivo CSV, agregar dos columnas adicionales e insertar datos que dependan de las columnas existentes?

Tengo un archivo CSV que se ve así, pero es mucho más largo:

ID Dirección
32 54298 Boca Chica Blvd Brownsville, TX
31 6640 Washington St, Yountville, CA 94599

Estoy intentando recorrer el archivo CSV, usar Geopy para obtener las latitudes y longitudes de cada dirección, e insertarlas en una tercera y cuarta columna que se verían así:

ID Dirección Latitud Longitud
32 54298 Boca Chica Blvd Brownsville, TX 34.5165131 90.1656516
31 6640 Washington St, Yountville, CA 94599 26.1231 51.516125

Realmente no importa si está en el mismo archivo CSV (eso es lo que estaba intentando), o en un nuevo archivo CSV. Las publicaciones anteriores que he leído se centran en agregar filas completas en lugar de columnas, o simplemente populan las nuevas columnas con datos que se escriben a mano o se codifican en el script de Python.

Hasta ahora puedo recorrer el archivo y obtener las latitudes y longitudes. El problema que tengo es principalmente en la parte de escritura. Esto es lo que tengo:

import geopy
import pandas as pd
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent=”sample app”)
df = pd.read_csv(r”C:\Users\Desktop\LatLongTest.csv”)
for row in df.itertuples():
try:
data = geolocator.geocode(row[7])
print(data.point.latitude)
except AttributeError:
print(‘error’)

¡Cualquier ayuda sería muy apreciada! Solo tengo un poco de experiencia en Java desde hace tiempo. La documentación y los ejemplos publicados para Python no son tan intuitivos para mí como lo era para Java, por lo que comenzar es un desafío.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar el módulo csv para escribir los datos en un nuevo archivo CSV. Puede utilizar la clase csv.writer para escribir los datos en el archivo. La clase csv.writer toma un objeto de archivo como argumento, por lo que puede abrir un archivo con la función open() y pasarlo a la clase csv.writer.

    Una vez que tenga el objeto csv.writer, puede utilizar el método writerow() para escribir los datos en el archivo. Puede utilizar el método writerow() para escribir los datos en el archivo en el mismo orden que el archivo CSV original.

    Por ejemplo:

    import csv
    import geopy
    import pandas as pd
    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="sample app")
    df = pd.read_csv(r"C:\Users\Desktop\LatLongTest.csv")
    
    # Abrir un nuevo archivo para escribir los datos
    with open('nuevo_archivo.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile)
    
        # Escribir la fila de encabezado
        writer.writerow(['ID', 'Dirección', 'Latitud', 'Longitud'])
    
        # Recorrer los datos y escribirlos en el archivo
        for row in df.itertuples():
            try:
                data = geolocator.geocode(row[7])
                writer.writerow([row[1], row[2], data.point.latitude, data.point.longitude])
            except AttributeError:
                print('error')
    

    Esto creará un nuevo archivo CSV con los datos en el formato que especificó.

Comments are closed.