ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

di il
10 risposte

ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

Salve a tutti,
ho più di un problema con il seguente codice:

import openpyxl


def search(ZC, sheet):
    Tlist = []
    for i in range(3, 104):
        if ZC >= tsheet.cell(2, i).value and ZC < str(tsheet.cell(2, i + 1).value):
            for j in range(3, 15):
                Tlist.append(tsheet.cell(j, i).value)
    return Tlist



utvalue = openpyxl.load_workbook(r'C:\Users\x86\Documents\MEGA\tirocinio\materiale\materiale per tesi\quicktool versions\U&Tvalue.xlsx')
usheet = utvalue['U value']
tsheet = utvalue['T value']

a = (input("scrivi 5 cifre: "))
listaT = search(a, tsheet)
print(listaT)
nelle intenzioni dovrebbe cercare in un file excel un valore a 5 cifre inserito in input (zipcode) e restituire 12 relativi dati (T° mensile) correlati a quel numero a 5 cifre. Ma invece mi dà i 2 seguenti problemi:
1) anzichè pescare 12 valori, me ne pesca 24, di cui i primi 12 corretti e gli altri 12 sono elementi vuoti (None).
2) per un codice compreso tra 99000 e 99999 (ultima colonna con dati del file excel) mi restituisce solo 12 elementi vuoti e non quindi i valori di T° che mi aspettavo.
Vorrei allegare anche il file excel in questione ma non riesco. Posso comunque assicurare che non è lì il problema.
Potete gentilmente aiutarmi?

10 Risposte

  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Senti non ho mai usato openpyxl, anche perche' in python se vuoi processare, parsare e manipolare files excel, lo fai alla grande con pandas;
    detto questo, non spieghi come e' fatto il file, magari stampa una head, giusto per capirne struttura,e il type dei dati...
    poi queste cose con pandas le risolvi velocemente senza alcun sbattimento
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    dr.Kem ha scritto:


    Senti non ho mai usato openpyxl, anche perche' in python se vuoi processare, parsare e manipolare files excel, lo fai alla grande con pandas;
    detto questo, non spieghi come e' fatto il file, magari stampa una head, giusto per capirne struttura,e il type dei dati...
    poi queste cose con pandas le risolvi velocemente senza alcun sbattimento
    Grazie per aver risposto. Io sono alle prime armi con la programmazione con python (e la programmazione in generale), per cui non capisco cosa intendi per stampare una head. In tutti i casi se ti riferisci al file excel, ebbene ripeto che sul forum non mi fa caricare o allegare nessun file. Posso dirti che è un foglio di calcolo con 100 colonne (da "00000" a "99000" spostandosi di 1000 ad ogni colonna) e 13 righe. Infine nel file tutti i dati inseriti sono di tipo testo. Spero di averti detto qualcosa di utile
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    dr.Kem ha scritto:


    Senti non ho mai usato openpyxl, anche perche' in python se vuoi processare, parsare e manipolare files excel, lo fai alla grande con pandas;
    detto questo, non spieghi come e' fatto il file, magari stampa una head, giusto per capirne struttura,e il type dei dati...
    poi queste cose con pandas le risolvi velocemente senza alcun sbattimento
    ciao scusami ancora, ma non capisco nemmeno come si usa pandas. Come si fa ad aprire e leggere il contenuto di un file excel con pandas? con openpyxl so farlo. Comunque ho capito come allegare il file excel in questione, ora lo aggiungo.
    Allegati:
    29145_e09751945350bf44b05e8ae7a8db5176.png
    29145_e09751945350bf44b05e8ae7a8db5176.png
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Allora, io leggo che hai una colonna in cui riporti i mesi , e il resto delle colonne vedo valori numerici, float nello specifico non testo; magari sono salvate come stringhe, ma mi sembrerebbe strano, perche' non avrebbe gran senso..
    quindi alla fine cosa ti serve fare?

    import pandas as pd
    pd.read_csv('path_to_excel_file')
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Su excel le posso salvare come testo o numero (ed altri modi che non mi servono). Salvarle come stringhe o numero è indifferente, ho provato in entrambi i modi ma mi dà sempre lo stesso errore. Nel mio ultimo tentativo ho provato con dati di tipo testo ecco spiegato il senso di sceglierli di tipo stringa.
    Al di là di questi dettagli, il mio obiettivo è entrare in quel file excel con un codice a 5 cifre (testo o stringa anche qui è indifferente), cercarlo tra gli intervalli racchiusi nelle coppie di colonne adiacenti (i , i+1) al 2°rigo di quel .xlsx, e restituire i 12 valori appartenenti alla 1° colonna della coppia (i) a partire dal 3° rigo.
    Così come ho scritto il codice, ogni volta ottengo 12 valori corretti, ma anche 12 valori in più, tutti nulli (None). Inoltre per un codice compreso tra 99000 e 100000 (ultime 2 colonne al 2° rigo) ottengo solo valori nulli. Spero puoi aiutarmi, grazie ancora
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Allora vediamo se mi e' chiaro..
    in quel file devi cercare l'intervallo-range chiuso a sx e aperto a dx tra due colonne consecutive che contiene il numero che definisci tu;
    quindi trovato l'intervallo, estrai l'indice della colonna di sinistra e dalla 3 riga di quella colonna estrai i suddetti valori delle 12 righe succcessive, giusto?
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Esatto . domani proverò con pandas con la funzione che mi hai consigliato. Vedo cosa riesco ad ottenere
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Ok, allora ti riporto un esempio semplice e soprattutto riproducibile in cui creo un dataframe ,che come 'nomi' /header delle colonne ha interi (come nel tuo caso)
    e come righe valori interi random, giusto per farti capire come fungono le cose.
    tu ottieni tale dataframe semplcemente caricando il tuo fiel excel con pd.read_csv....
    
    import pandas as pd
    import numpy as np
    
    # creo un dataframe random
    # invece tu puoi caricare il tuo con pd.read_csv(path_to _file...)
    df = pd.DataFrame(np.random.randint(0, 100, size=(13, 10)), columns=list(range(0, 10000, 1000)))
    
    # il numero che vuoi cercare
    code = 3500
    
    # il numero di riga da cui vuoi partire nel recuperare i dati dalla colonna interessata
    n_row = 3
    
    # estrai i nomi/valori delle colonne tra  cui cerchi le due col range corretto
    header_list = df.columns.tolist()
    header_list_zipd = list(zip(header_list, header_list[1:]))
    
    # qui ti trovi l'indice della colonna interessata (hai detto la prima delle due che contiene il range del code)
    index = [i for i, t in enumerate(header_list_zipd) if t[0] <= code < t[1]]
    
    # cosi  estrai le righe volute
    result = df.iloc[n_row :, index[0]].iloc[:, 0].tolist()
    
    prova tu con i tuoi dati, poii se ti servono chiarimenti, chiedi...ma con codice alla mano
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Ok, oggi proverò con il tuo codice. In realtà avevo quasi risolto. Quasi perchè l'ultima colonna con dati nel file excel continua a non trovarla. Il resto però ero riuscito a risolverlo con quel codice che avevo scritto. Il problema era nel file excel (pensavo fosse fatto bene e invece ... ) . Infatti nel file excel l'ultima colonna con dati (la n 103) non la trovava per il discorso che python nei cicli for considera intervalli con estremi non inclusi nel ciclo. Comunque devo provare con il tuo codice. Grazie per l aiuto.
  • Re: ESTRAZIONE ERRATA DI DATI DA FILE EXCEL

    Ciao
    bene che hai risolto da solo; (si quel file excel e' 'formattato' male...anche l'header e' una riga vuota..
    primo: se hai a che fare con piccoli files, come il tuo,, ok..ma il tuo codice e' cmq molto meno efficiente del mio per due motivi:
    primo fra tutti usi due for loop annidati ->> complessita O (N ^ 2);
    secondo: se vuoi avere a che fare con dati , in Python, non puoi prescindere dal conoscere pandas e compari.
    saluti
Devi accedere o registrarti per scrivere nel forum
10 risposte