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

2017-05-18 Per discussione Paolo Di Ieso

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

2017-05-18 Per discussione Paolo Di Ieso

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

2017-05-18 Per discussione Paolo Di Ieso

Il 16/05/2017 18:56, Giovanni Porcari ha scritto:

Il giorno 16 mag 2017, alle ore 18:50, Paolo Di Ieso  ha 
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

2017-05-18 Per discussione Pietro Battiston
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

2017-05-16 Per discussione Federico Cerchiari
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  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?
>
> 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

2017-05-16 Per discussione Giovanni Porcari

> 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

2017-05-16 Per discussione Paolo Di Ieso
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

2017-05-16 Per discussione Gollum1
Il 16 maggio 2017 16:31:21 CEST, Paolo Di Ieso  ha 
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