J'ai un fichier csv de cette page Web . Je souhaite lire certaines des colonnes du fichier téléchargé (la version csv peut être téléchargée dans le coin supérieur droit).
Disons que je veux 2 colonnes:
star_name
ra
.Cependant, pour une raison quelconque, les auteurs de la page Web décident parfois de déplacer les colonnes.
En fin de compte, je veux quelque chose comme ceci, tout en gardant à l'esprit que des valeurs peuvent être absentes.
data = #read data in a clever way
names = data['star_name']
ras = data['ra']
Cela empêchera mon programme de mal fonctionner lors de la prochaine modification des colonnes si elles conservent le nom correct.
Jusqu'à présent, j'ai essayé de différentes manières en utilisant le module csv
et le module pandas
. Les deux sans aucune chance.
EDIT (ajouté deux lignes + l'en-tête de mon fichier de données. Désolé, mais c'est extrêmement long.)
# 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,,
Un moyen facile de faire cela consiste à utiliser la bibliothèque pandas
comme celle-ci.
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
Le problème ici était le skipinitialspace
qui supprime les espaces dans l'en-tête. Donc 'star_name' devient 'star_name'
Nous avons eu une solution au problème ci-dessus d’une manière différente, bien que je lise un fichier csv complet, mais que je tweekais la partie affichage pour afficher uniquement le contenu souhaité.
import pandas as pd
df = pd.read_csv('data.csv', skipinitialspace=True)
print df[['star_name', 'ra']]
Celui-ci pourrait aider dans certains scénarios en apprenant les bases et en filtrant les données sur la base de colonnes dans le cadre de données.