[Python] Modificare i valori di una colonna di un file csv

Federico Cerchiari federicocerchiari a gmail.com
Mar 16 Maggio 2017 19:19:11 CEST


Ciao Paolo,
non sono un esperto di Pandas, ma se i tuoi file non sono troppo grandi
puoi farne a meno ed utilizzare il modulo csv:

import csv
# Leggi i due file
with open('file1.csv', 'rb') as f1:
    with open('file2.csv', 'rb') as f2:
        # Dal secondo crei un dizionario di mapping
        mapping = {row[0]: row[1] for row in csv.reader(f2, delimiter=' ')}
         # Dal primo estrai le righe e sostituisci i valori, se non è
presente il valore nel secondo file, hai come fallback il valore originale
        result = [mapping.get(row[0], row[0]) for row in csv.reader(f1,
delimiter=' ')]

# Salvi nel primo file quello che hai ottenuto
with open('file1.csv', 'wb') as f1:
    csv.writer(f1).writerows(result)




Il giorno 16 maggio 2017 18:50, Paolo Di Ieso <paolodiieso a libero.it> ha
scritto:

> La stanchezza, ero sicuro di aver creato ex-novo l'email. Riprovo come
> consigliato da Gollum! ;)
>
> Dicevo che sono alle prime armi con Pandas e ho questo problema: in due
> dataframe ho il contenuto di due file CSV, entrambi con un header e qualche
> decina di colonne. Iterando sulle righe di entrambi voglio modificare il 1°
> file in modo tale che quando un valore della colonna "srvid" del 1° file
> coincide con il valore dell'omonima colonna "srvid" del 2° file, nella
> colonna "srvid" del 1° file metto il valore preso dalla colonna "srvname"
> del 2°. Un esempio:
>
> Situazione iniziale 1° file:
>
> srvid
> 42
> 63
> 63
> 63
> 42
> 42
>
> Situazione iniziale 2° file:
>
> srvid srvname
> 42    HOTSPOT
> 43    WiFi 6M
> 44    WiFi 8M
>
>
> Situazione 1° file dopo le modifiche:
>
> srvid
> HOTSPOT
> 63
> 63
> 63
> HOTSPOT
> HOTSPOT
>
> Tutti i valori 42 della colonna "srvid" del 1° file sono stati sostituiti
> dal valore "HOTSPOT" trovato in "srvname" del 2° file quando l'adiacente
> "srvid" ha anch'essa valore 42. Ho iniziato scrivendo
>
> df = pd.read_csv(rm_users_in, sep=";",
>                  usecols=rm_users_to_o4w_column.keys(),
>                  dtype={"zip": object}  # fix value from 50015.0 to 50015
>                  )
> df2 = pd.read_csv(rm_services_in, sep=";",
>                   usecols=rm_services_to_o4w_column.keys()
>                   )
> for row in df.itertuples():
>     for row2 in df2.itertuples():
>         if row.srvid == row2.srvid:
>             row["srvid"] = row2.srvname
>
> ma dal traceback capisco di non essere sulla strada giusta. Mi date una
> mano a tornare sulla retta via?
>
> Grazie mille.
> Paolo
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20170516/766c409b/attachment.html>


Maggiori informazioni sulla lista Python