【发布时间】:2018-07-19 23:12:19
【问题描述】:
我有一个以空格分隔的.dat 文件,其前几行如下所示:
1 SDSSJ000005.95+145310.1 2.49900 * 0.000e+00 0.00 NA -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 0.000 0.000 NONE
4 SDSSJ000009.27+020621.9 1.43200 UvS 0.000e+00 0.00 NA -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 0.000 0.000 NONE
5 SDSSJ000009.38+135618.4 2.23900 QSO 0.000e+00 0.00 NA -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 0.000 0.000 NONE
6 SDSSJ000011.37+150335.7 2.18000 * 0.000e+00 0.00 NA -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 0.000 0.000 NONE
11 SDSSJ000030.64-064100.0 2.60600 QSO 0.000e+00 0.00 NA -999.000 -999.000 -999.000 -999.000 15.460 -999.000 -999.000 -999.000 -999.000 23.342 56.211 UV
15 SDSSJ000033.05+114049.6 0.73000 UvS 0.000e+00 0.00 NA -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 -999.000 0.000 0.000 NONE
27 LBQS2358+0038 0.95000 QSO 0.000e+00 0.00 NA 17.342 18.483 18.203 17.825 -999.000 -999.000 -999.000 -999.000 -999.000 23.301 56.572 UV
它们是天文测量,文件中有 29008 行。当我阅读文件时
import pandas as pd
data = pd.read_csv('todo.dat', sep = ' ',
names = ['no', 'NED', 'z', 'obj_type','S_21', 'power',
'SI_flag','U_mag', 'B_mag', 'V_mag', 'R_mag',
'K_mag', 'W1_mag', 'W2_mag', 'W3_mag', 'W4_mag',
'L_UV', 'Q', 'flag_uv'])
数据框显示[29008 rows x 19 columns]。我想根据标题为z 的列(即第三列——索引2)来组织数据。将index_col='z' 添加到read_csv 调用会给我一个KeyError: 'z' 错误,但使用index_col = 2 不会给我一个错误。我认为 pandas 将标题标记为字典,因此 'z' 应该是该列字典中的键。那么,当我将索引 2 称为“z”时,为什么会出现错误?
【问题讨论】:
-
原因很简单,因为
index_col需要一个整数或整数序列作为参数 - pandas.pydata.org/pandas-docs/stable/generated/…。现在,为什么它不接受列名,可能是它的实现方式。 -
@Shiva 其实是
read.csv index_colargument has been accepting string or list-of-string for some time, but the doc was never been updated。至少这适用于标题中的列名。 OP 是说这会破坏通过names传递的列名? OP,您能否在当前(0.23)上确认这一点?如果是这样,那值得bug -
“SDSSJ000005.95+145310.1”真的是你的第二列“NED”,还是按照某种固定格式拆分?
标签: python-3.x pandas csv