使用 Pandas 或其他 python 模块阅读特定的列

我有一个来自这个 网页的 CSV 文件。 我想阅读下载文件中的一些列(csv 版本可以在右上角下载)。

假设我想要两栏:

  • 59在头部是 star_name
  • 标题中的 ra是60。

然而,由于某些原因,网页的作者有时决定移动栏目。

最后,我想要这样的东西,记住,价值观可能会丢失。

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

这将防止我的程序在将来再次更改列时发生故障,如果它们保持名称正确的话。

到目前为止,我已经尝试了各种方法使用 csv模块和最近的 pandas模块。都没有任何运气。

编辑(添加了两行 + 我的数据文件的头部。对不起,它非常长。)

# 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,,
302629 次浏览

一个简单的方法是像这样使用 pandas库。

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

The problem here was the skipinitialspace which remove the spaces in the header. So ' star_name' becomes 'star_name'

得到了一个解决上述问题在不同的方式,虽然我会阅读整个 csv 文件,但会调整显示部分,以显示只有内容是所需要的。

import pandas as pd


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

这可以帮助一些场景学习基础知识,并根据数据框架中的列对数据进行过滤。

根据最新的熊猫文档,您可以阅读一个 csv 文件,只选择您想要阅读的列。

import pandas as pd


df = pd.read_csv('some_data.csv', usecols = ['col1','col2'], low_memory = True)

这里我们使用 usecols,它只读取数据框架中选定的列。

我们使用 low_memory以便在内部分块处理文件。

以上答案是 python2。因此,对于 python 3用户,我给出了这个答案。你可以使用以下代码:

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)

我觉得你应该试试这个方法。

import pandas as pd


data_df = pd.read_csv('data.csv')


print(data_df['star_name'])


print(data_df['ra'])