2014-09-26 15 views
19

Ho un file csv da questo webpage. Voglio leggere alcune colonne nel file scaricato (la versione csv può essere scaricata nell'angolo in alto a destra).Leggi colonne specifiche con panda o altro modulo python

Diciamo che voglio 2 colonne:

  • 59, che nella testata è star_name
  • 60 che nell'intestazione è ra.

Tuttavia, per qualche motivo gli autori della pagina Web a volte decidono di spostare le colonne.

Alla fine voglio qualcosa di simile, tenendo presente che i valori possono mancare.

data = #read data in a clever way 
names = data['star_name'] 
ras = data['ra'] 

Ciò impedirà il malfunzionamento del programma quando le colonne verranno nuovamente modificate in futuro, se mantengono il nome corretto.

Fino ad ora ho provato vari modi utilizzando il modulo csv e attualmente il modulo pandas. Entrambi senza fortuna.

EDIT (aggiunto due linee + l'intestazione del mio file di dati. Ci dispiace, ma è estremamente lungo.)

# name, mass, mass_error_min, mass_error_max, radius, radius_error_min, radius_error_max, orbital_period, orbital_period_err_min, orbital_period_err_max, semi_major_axis, semi_major_axis_error_min, semi_major_axis_error_max, eccentricity, eccentricity_error_min, eccentricity_error_max, angular_distance, inclination, inclination_error_min, inclination_error_max, tzero_tr, tzero_tr_error_min, tzero_tr_error_max, tzero_tr_sec, tzero_tr_sec_error_min, tzero_tr_sec_error_max, lambda_angle, lambda_angle_error_min, lambda_angle_error_max, impact_parameter, impact_parameter_error_min, impact_parameter_error_max, tzero_vr, tzero_vr_error_min, tzero_vr_error_max, K, K_error_min, K_error_max, temp_calculated, temp_measured, hot_point_lon, albedo, albedo_error_min, albedo_error_max, log_g, publication_status, discovered, updated, omega, omega_error_min, omega_error_max, tperi, tperi_error_min, tperi_error_max, detection_type, mass_detection_type, radius_detection_type, alternate_names, molecules, star_name, ra, dec, mag_v, mag_i, mag_j, mag_h, mag_k, star_distance, star_metallicity, star_mass, star_radius, star_sp_type, star_age, star_teff, star_detected_disc, star_magnetic_field 
11 Com b,19.4,1.5,1.5,,,,326.03,0.32,0.32,1.29,0.05,0.05,0.231,0.005,0.005,0.011664,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2008,2011-12-23,94.8,1.5,1.5,2452899.6,1.6,1.6,Radial Velocity,,,,,11 Com,185.1791667,17.7927778,4.74,,,,,110.6,-0.35,2.7,19.0,G8 III,,4742.0,, 
11 UMi b,10.5,2.47,2.47,,,,516.22,3.25,3.25,1.54,0.07,0.07,0.08,0.03,0.03,0.012887,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,2009,2009-08-13,117.63,21.06,21.06,2452861.05,2.06,2.06,Radial Velocity,,,,,11 UMi,229.275,71.8238889,5.02,,,,,119.5,0.04,1.8,24.08,K4III,1.56,4340.0,, 
+0

funziona se si esegue 'df = pd.read_csv ('data.csv', usecols = ['star_name', 'ra'])'? – EdChum

+0

No. Mi dà un 'ValoreError: 'star_name' non è in elenco'. Ho provato qualcosa di simile con la parola chiave 'names' invece di' usecols', ma non funziona neanche (ma funziona senza errori). –

+0

Non vedo nessuna di quelle colonne in quella tabella, quindi forse questo è il problema. Pubblica le prime righe dei dati con cui * stai * effettivamente lavorando. –

risposta

37

Un modo semplice per farlo è usare la libreria pandas come questo.

import pandas as pd 
fields = ['star_name', 'ra'] 

df = pd.read_csv('data.csv', skipinitialspace=True, usecols=fields) 
# See the keys 
print df.keys() 
# See content in 'star_name' 
print df.star_name 

Il problema qui era il skipinitialspace che rimuovono gli spazi nell'intestazione. Quindi 'star_name' diventa 'star_name'

1

Hai una soluzione al problema di cui sopra in un modo diverso in cui, anche se vorrei leggere l'intero file CSV, ma sarebbe tweek la parte di visualizzazione per mostrare solo il contenuto che si desidera.

import pandas as pd 

df = pd.read_csv('data.csv', skipinitialspace=True) 
print df[['star_name', 'ra']] 

Questo potrebbe aiutare in qualche dello scenario di base di apprendimento e filtrare i dati in base a colonne in dataframe.

+0

Grazie per la condivisione :) È qualcosa in linea che lo farei anche io ora. –

+0

imparando le basi di esso, cercando di entrare in analisi dei dati, @DanielThaagaardAndreasen potrebbe aiutarmi a guidare i passi per andare avanti con i panda, qualsiasi buona fonte o tutorial. –

+0

Certo :) Penso che ci sia molto da trovare su youtube.Mi piace questo canale: https://www.youtube.com/channel/UCnVzApLJE2ljPZSeQylSEyg –

Problemi correlati