Forum
>>
Programmazione Python
>>
Calcolo scientifico
>>
Pandas package
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Antonio75 |
2019-02-18 14:08:44 - Pandas package
|
Salve, ho associato il contenuto di due file .csv a due DataFrame (Pandas). Ho realizzato alcune righe di codice che, attraverso una serie di cicli condizionali (if, elif), associano ad ogni riga di uno dei due Dataframe un valore numerico e sostituiscono il valore numerico trovato nell'altro DataFrame. Alla fine ho associato il DtaFrame modificato ad un nuovo file .csv
Aprendo il file .csv ho verificato che per cicli condizionali brevi (while i < 1000) l'algoritmo funziona, ma per cicli piu lunghi (i.e. while i< 8000) le sostituzioni non sempre funzionano correttamente. Qualcuno può darmi qualche indicazione su come procedere? Grazie, Antonio |
|
Scritto da Daniele aka Palmux |
2019-02-18 19:12:13 - Re: Pandas package
|
Ciao a te.
Forse, e scrivo forse, mostrando il tuo codice (evidenziando dove ti inceppi), i dati che cerchi di manipolare, su che piattaforma sei e con quale versione del linguaggio, otterrai un aiuto visto che così si avrebbero più risultati a sparare alle zanzare nella nebbia [cit.]. Cya |
|
Scritto da Antonio75 |
2019-02-19 10:30:02 - Re: Pandas package
|
Ciao, hai ragione.
Il pezzo di codice è il seguente: # importa due file di tipo csv uno contenente i dati da manipolare e l'altro una sola colonna con i valori di classi di stabilita da modificare: stability_evaluation = pd.read_csv('stability_evaluation.csv', sep=' ') stability = pd.read_csv('stability_in.csv', sep=' ') dh = pd.DataFrame(stability_evaluation) dn = pd.DataFrame(stability) # determina il valore della classe di stabilita a partire dai dati meteo: i = 0 while i < 3000: # --------------------------------- DAY ----------------------------------------------- if (dh.at[i,'h'] >= 6 and dh.at[i,'h'] <= 19): # day: 6-19 if dh.at[i,'v'] < 2: # wind: < 2 m/s if dh.at[i,'r'] > 600: dn.at[i,'a'] = 1 # A elif dh.at[i,'r'] >= 300 and dh.at[i,'r'] <= 600: dn.at[i,'a'] = 2 # A-B elif dh.at[i,'r'] < 300: dn.at[i,'a'] = 2 # B elif dh.at[i,'v'] >= 2 and dh.at[i,'v'] <= 3: # wind: 2-3 m/s if dh.at[i,'r'] > 600: dn.at[i,'a'] = 2 # A-B elif dh.at[i,'r'] >= 300 and dh.at[i,'r'] <= 600: dn.at[i,'a'] = 2 # B elif dh.at[i,'r'] < 300: dn.at[i,'a'] = 3 # C elif dh.at[i,'v'] > 3 and dh.at[i,'v'] <= 5: # wind: 3-5 m/s if dh.at[i,'r'] > 600: dn.at[i,'a'] = 2 # B elif dh.at[i,'r'] >= 300 and dh.at[i,'r'] <= 600: dn.at[i,'a'] = 3 # B-C elif dh.at[i,'r'] < 300: dn.at[i,'a'] = 3 # C elif dh.at[i,'v'] > 5 and dh.at[i,'v'] <= 6: # wind: 5-6 m/s if dh.at[i,'r'] > 600: dn.at[i,'a'] = 3 # C ... dn.at[i,'a'] = 4 # D elif dh.at[i,'c'] > 87.50 and dh.at[i,'c'] <= 100.00: # cloud: 8 dn.at[i,'a'] = 4 # D elif dh.at[i,'v'] > 5 and dh.at[i,'v'] <= 6: # wind: 5-6 m/s if dh.at[i,'c'] >= 0 and dh.at[i,'c'] <= 37.50: # cloud: 0-3 dn.at[i,'a'] = 5 # E elif dh.at[i,'c'] > 37.50 and dh.at[i,'c'] <= 87.50: # cloud: 4-7 dn.at[i,'a'] = 4 # D elif dh.at[i,'c'] > 87.50 and dh.at[i,'c'] <= 100.00: # cloud: 8 dn.at[i,'a'] = 4 # D elif dh.at[i,'v'] > 6: # wind: > 6 m/s if dh.at[i,'c'] >= 0 and dh.at[i,'c'] <= 37.50: # cloud: 0-3 dn.at[i,'a'] = 4 # D elif dh.at[i,'c'] > 37.50 and dh.at[i,'c'] <= 87.50: # cloud: 4-7 dn.at[i,'a'] = 4 # D elif dh.at[i,'c'] > 87.50 and dh.at[i,'c'] <= 100.00: # cloud: 8 dn.at[i,'a'] = 4 # D elif (dh.at[i,'h'] == 5 or dh.at[i,'h'] == 20): # 1 hr before Sunset or after Sunrise dn.at[i,'a'] = 4 # D else: print('error') i += 1 # crea un file .csv a partire dai dati del DataFrame che contiene la colonna dei dati di stabilita atmosferica aggiornati: dn.to_csv('stability_out.csv', sep=' ') il problema è che per alti valori di i (while i< 6000) le sostituzioni sul DatFrame Pandas dn sono per la maggior parte sbagliati.Si crea un file stability_out.csv con le sosotituzioni sbagliate. Solo per bassi valori di scorrimento dell'indice (i < 2000 - 1000) le sostituzioni vengono corrette. Sono su Windows 10, con Python 2.7.10. Ciao, Antonio |
Pagina: 1
Esegui il login per scrivere una risposta.