Re: [Python] Modificare i valori di una colonna di un file csv
Il 18/05/2017 08:19, Pietro Battiston ha scritto: Direi proprio di sì: aggiungo che a seconda della struttura del problema, un'alternativa (per me spesso più pratica) al comando join è creare gli indici giusti ed utilizzare semplicemente .loc. In generale, se si usa pandas (solo) per applicare del codice python riga per riga, si sta perdendo ogni beneficio (in termini di efficienza, ma anche di comodità) di pandas. Vero, è che essendo agli inizi sto ancora cercando di capire come utilizzarlo, per farlo al meglio immagino ci vorrà un po' di più. Grazie mille per il suggerimento su .loc. Paolo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Modificare i valori di una colonna di un file csv
Il 16/05/2017 19:19, Federico Cerchiari ha scritto: 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) Ciao Federico, bella l'idea del mapping, non ci avevo pensato, e utilizzando un DictReader potrei indirizzare per header della colonna dato che nel csv reale dove c'e ne sono alcune decine la loro posizione non è garantita. Grazie per i suggerimenti! :) Paolo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Modificare i valori di una colonna di un file csv
Il 16/05/2017 18:56, Giovanni Porcari ha scritto: Il giorno 16 mag 2017, alle ore 18:50, Paolo Di Iesoha scritto: 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°. Mi pare che tu voglia fare una join basandoti sulle due colonne 'srvid'. Non è che puoi usare il comando join di pandas ? http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html Ciao Giovanni, credo di si, appena ho un attimo di tempo gli do un'occhiata, intanto grazie per il suggerimento! :) Paolo ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Modificare i valori di una colonna di un file csv
Il giorno mar, 16/05/2017 alle 18.56 +0200, Giovanni Porcari ha scritto: > > Il giorno 16 mag 2017, alle ore 18:50, Paolo Di Ieso> ibero.it> ha scritto: > > [...] > > 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: > > > Mi pare che tu voglia fare una join basandoti sulle due colonne > 'srvid'. > > Non è che puoi usare il comando join di pandas ? > http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFram > e.join.html > Direi proprio di sì: aggiungo che a seconda della struttura del problema, un'alternativa (per me spesso più pratica) al comando join è creare gli indici giusti ed utilizzare semplicemente .loc. In generale, se si usa pandas (solo) per applicare del codice python riga per riga, si sta perdendo ogni beneficio (in termini di efficienza, ma anche di comodità) di pandas. Ciao, Pietro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Modificare i valori di una colonna di un file csv
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 Iesoha 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 > 42HOTSPOT > 43WiFi 6M > 44WiFi 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
Re: [Python] Modificare i valori di una colonna di un file csv
> Il giorno 16 mag 2017, alle ore 18:50, Paolo Di Ieso> 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 > 42HOTSPOT > 43WiFi 6M > 44WiFi 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? Mi pare che tu voglia fare una join basandoti sulle due colonne 'srvid'. Non è che puoi usare il comando join di pandas ? http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.join.html Se ho frainteso perdonami :) Ciao G > > 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
[Python] Modificare i valori di una colonna di un file csv
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 42HOTSPOT 43WiFi 6M 44WiFi 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
Re: [Python] Modificare i valori di una colonna di un file csv
Il 16 maggio 2017 16:31:21 CEST, Paolo Di Iesoha scritto: >Ciao a tutti. Ho appena iniziato con Pandas e ho una gran confusione in > 1) non rispondere ad una mail per iniziare un nuovo thread, invia una nuova mail alla ml. Riprova, sarai più fortunato, e forse qualcuno ti darà la risposta che desideri. -- Gollum1 Teoro, dov'è il mio teoro... Inviato dal mio dispositivo Android con K-9 Mail. Perdonate la brevità e gli errori (maledetto correttore ortografico). ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python