【问题标题】:Trying to understand pandas dataframes试图理解熊猫数据框
【发布时间】: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”时,为什么会出现错误?

【问题讨论】:

标签: python-3.x pandas csv


【解决方案1】:

在我看来,这似乎有问题,并且可能与 this issue 有关。一个简单的解决方法是事后使用set_index

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']).set_index('z')

【讨论】:

  • 这与您提到的错误无关,因为那是关于 dask 后端。我一直试图在熊猫本身上重现它。当 len(names) 减去 index_col 的 1 时,似乎会发生这种情况,它比数据中的列数短。
猜你喜欢
  • 2013-04-03
  • 2015-07-08
  • 2018-04-23
  • 2019-05-13
  • 1970-01-01
  • 2013-08-16
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多