【问题标题】:Pandas not handling file as expected熊猫没有按预期处理文件
【发布时间】:2018-07-20 08:42:31
【问题描述】:

我有一个包含需要绘制的天文数据的文件。前几行如下所示:

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 

我正在尝试将第三列(第一行的值为 z = 2.49900)设置为索引,因为这是我将要绘制的列。以 -999.000 开头的列是我将要处理和绘制的值。

我的问题是,pandas 没有像我预期的那样处理文件。我正在使用

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'])

data.set_index('z')

将文件读入数据框,它给了我以下信息:

但我希望 Index 列是 1, 2, 3, 4, ...'no' 列是 1, 4, 5, 6, ... 在文件中。

如何防止文件中的第一列被解释为索引?我想按原样保留行的编号。

我问了一个相关问题here,但答案没有帮助。

【问题讨论】:

  • 可以加index_col =False

标签: python-3.x pandas


【解决方案1】:

您不能将'z' 设为数据框的索引,因为索引只能是整数或序列('z' 是浮点值,因此不能作为索引)。

如果'z' 是一个整数/序列,你会想试试:

data = pd.read_csv('todo.dat', sep = ' ', index_col = 'z',
                   names = ['no', 'NED', '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'])

【讨论】:

  • 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'], index_col = False).set_index('z') 似乎已经按照我的意愿对齐列,并且还使z 列成为索引,尽管我无法使用max(data['z']) 之类的东西来检查它。为什么说我不能作为索引使用?
  • 我对我的 pandas 有点生疏了,但我说过不能将它用作索引,因为索引只能是整数和序列。 'z' 不是整数(尽管您可以通过乘以 10 的幂使其成为整数)。此外,如果你想检查它,你应该为你的索引创建一个重复的列。
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多