2015-07-21 14 views
5

Ho un file csv e devo calcolare la media per alcune colonne. Ecco come ho fatto:Come leggere i numeri in python dal file csv?

file=csv.reader(open('tab.csv','r')) 
n=[] 
for row in file: 
    n.append(row[8]) 

quindi ho un elenco di stringa: n = [ '', '', '1.58' ...] Come posso convertire questi per galleggiare? Ho provato con:

n_values=np.array(n) 
n_values[n=='']='0' 
values=n_values.astype(np.float) 
np.mean(values) 

Ma la media non è corretto perché devo saltare le stringhe vuote senza contare. Grazie per il tuo aiuto!

+3

È possibile utilizzare 'n.append (float (row [8]))', ma se si dispone di valori vuoti voi sarà necessario inserirlo all'interno di un blocco try/except. – matiasg

+0

@Alice Quello che si sta chiedendo in realtà è come convertire la stringa in float. Il resto delle cose nella domanda è irrilevante –

+0

@OmerDagan: dovendo fare conversioni di tipo esplicito è un odore di codice, basta usare pandas 'pd.read.csv()'. La domanda come sta va bene (si spera che il file CSV abbia un'intestazione) – smci

risposta

9

appena lanciato come si accoda:

n.append(float(row[8])) 

Se ci sono stringhe vuote cattura quelli prima di aggiungere.

try: 
    n.append(float(row[8])) 
except ValueError: 
    continue 

Oppure si potrebbe desiderare di provare i panda, in particolare pandas.read_csv:

import pandas as pd 

df = pd.read_csv("in.csv") 
print(df["col_name"].mean()) 
+2

No prob, prego. se stai usando numpy e si occupano di csv, ti consiglio caldamente di dare un'occhiata ai panda. –

+0

Ho provato ma ho ottenuto: nessun modulo chiamato panda. Dovrei installarlo? – Alice

+2

sì, devi installarlo. prova ad installarlo con pip – Shrey