1

Estoy trabajando con el Modulo PANDAS y quiero ingresar un valor de la tabla .csv y quiero que me determine otro valor de la misma tabla, por ejemplo:

SI INGRESO EL DISTRITO = PEBAS QUIERO QUE ME RESPONDA LA ZONA SISMICA = 1, EN ESTE CASO 1, como se observa en la imagen.

Este es la parte del código, lo que me falta es recorrer la tabla con el bucle FOR y poner la condición IF para condicionar la entrada.

import pandas as pd
import numpy as np

datos = pd.read_csv("distri_sism_1.csv", encoding="latin9", sep=";")
df = pd.DataFrame(datos)

ingreso = str(input("Ingresa: "))

...

Tabla de datos: Tabla de datos a ingresar

1 Answers1

2

Realmente no necesitas un ciclo for para ello (por norma general mucho más ineficiente que los métodos vectorizados que ofrece Pandas), pero puedes usarlo de varias formas además:

  • Iterando sobre los índices:

    import pandas as pd
    
    df = pd.read_csv("distri_sism_1.csv", encoding="latin9", sep=";")
    
    ingreso = input("Ingresa: ")
    for idx in df.index:
        if df.DISTRITO[idx] == ingreso:
            print(f"La zona sísmica de '{ingreso}' es: {df.ZONASISMICA[idx]}")
            break # Rompemos el ciclo
    else:
        print(f"No se ha encontrado el distrito '{ingreso}'")
    
  • Iterando sobre pandas.DataFrame.iterrows:

    import pandas as pd
    
    
    df = pd.read_csv("distri_sism_1.csv", encoding="latin9", sep=";")
    
    ingreso = input("Ingresa: ")
    for _, row in df.iterrows():
        if row.DISTRITO == ingreso:
            print(f"La zona sísmica de '{ingreso}' es: {row.ZONASISMICA}")
            break # Rompemos el ciclo
    else:
        print(f"No se ha encontrado el distrito '{ingreso}'")
    
  • Iterando sobre pandas.DataFrame.itertuples:

    import pandas as pd
    
    
    df = pd.read_csv("distri_sism_1.csv", encoding="latin9", sep=";")
    
    ingreso = input("Ingresa: ")
    for row in df.itertuples():
        if row.DISTRITO == ingreso:
            print(f"La zona sísmica de '{ingreso}' es: {row.ZONASISMICA}")
            break # Rompemos el ciclo
    else:
        print(f"No se ha encontrado el distrito '{ingreso}'")
    

Tienes otras opciones usando los métodos propios de Pandas/NumPy sien el uso de ciclos Python crudos:

  • Usando un filtro boleano y loc:

    import pandas as pd
    
    
    df = pd.read_csv("distri_sism_1.csv", encoding="latin9", sep=";")
    
    ingreso = input("Ingresa: ")
    
    row = df[df.DISTRITO == ingreso].head(1)
    if not row.empty:
        print(f"La zona sísmica de '{ingreso}' es: {row.ZONASISMICA.iloc[0]}")
    else:
        print(f"No se ha encontrado el distrito '{ingreso}'")
    
  • Usando pandas.DataFrame.query:

    import pandas as pd
    
    
    df = pd.read_csv("distri_sism_1.csv", encoding="latin9", sep=";")
    
    ingreso = input("Ingresa: ")
    
    row = df.query(f"DISTRITO == '{ingreso}'").head(1)
    if not row.empty:
        print(f"La zona sísmica de '{ingreso}' es: {row.ZONASISMICA.iloc[0]}")
    else:
        print(f"No se ha encontrado el distrito '{ingreso}'")
    

Existen más posibilidades, estas son solo algunas de ellas.

Un par de observaciones:

FJSevilla
  • 55,603
  • 7
  • 35
  • 58