[Python] Problem with iterations and dataframes to store variables in dict

Discussão em 'Python' iniciado por Stack, Agosto 15, 2025.

  1. Stack

    Stack Membro Participativo

    I received a code I'm trying to reduce and make more flexible.

    The code is for obtaining climate values from a .csv with many entries (+1 M).

    Since I don't want to overextend the code, I've made so that variables are selected by the user, and therefore, when the user selects this variables via terminal, a new variable is created.

    This worked well, but the problem comes when trying to store the climatic median variable for each point (ie, 85 stations).

    If I do it like this:

    for a in range(len(ciudad)):
    nombre = ciudad[a] # We obtain the name of each city (~85)
    datoa = localidades.loc[localidades['Nombre'] == nombre] # We focus on the "a" city each time

    if 'datos_TMax' in locals(): # If variable has been created as the user requested it exists
    tmax=datoa.loc[:,['TMax']] # We obtain the "Tmax" for each day in the selected period & iteration city
    tmax_m = tmax.mean() # Average for the period in the "a" city
    datos_TMax.append(tmax_m) # "datos_TMax" is a list created dynamically, and for each city the value is appended


    The example above works perfectly. At the end, I obtain a file with the city name and it's max temperature average for the period user chose.

    However, this way of coding it has problems: I've got to repeat an "if" statement for each possible variable, and then, when I transform to pd.DataFrame, I have to make tons of "if" possibilities and combinations so that whatever the case, no error is raised.

    Therefore, I decided to do it using a dict where lists (ie: dictionary{'Tmax' : [1, 2, 3, ...]}) would store all the values for each selected variable.

    The code for the loop looks like this:

    dicvar = {}
    for a in range(len(ciudad)):
    nombre = ciudad[a] # We obtain the name of each city (~85)
    datoa = localidades.loc[localidades['Nombre']==nombre] # We focus on the "a" city each time

    for b in bucles: # For each selected user variable, iterate
    if b in ['TMax', 'TMin', 'TMed', 'Racha', 'Dir', 'Velmedia', 'Sol', 'Presmax', 'Presmin']: # This is because some variables require different treatment
    valor = datoa.loc[:,] # Obtain the "b" value for each day in city "a" (valor is generic, as each iteration would have a different name)
    valor_m = valor.mean() # Make the mean for the "b" variable of this iteration
    print(valor_m) # Just to check

    dicvar.append(valor_m) # In theory, append to key "b" (ie: "TMax") the value "valor_m" from each iteration


    Well, the code runs and indeed 85 values are stored. However, when outputting, this is the result:

    x | Cityname | Tmax
    0 | Coruña | **TMax 19.78 dtype: float64**


    Where it should be

    x | Cityname | Tmax
    0 | Coruña | 19.78


    Any ideas on how to solve the problem? I've been trying to fix it for hours, but I don't see how.

    Thanks!

    Continue reading...

Compartilhe esta Página