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,,
funziona se si esegue 'df = pd.read_csv ('data.csv', usecols = ['star_name', 'ra'])'? – EdChum
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). –
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. –