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 <paolodii...@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@lists.python.it > http://lists.python.it/mailman/listinfo/python >
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python