web-dev-qa-db-fra.com

Lire des colonnes spécifiques avec pandas ou autre python module

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:

  • 59 qui dans l'en-tête est star_name
  • 60 dont l'en-tête est 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.

0
frp farhan