代码之家  ›  专栏  ›  技术社区  ›  Jim421616

熊猫没有按预期处理文件

  •  0
  • Jim421616  · 技术社区  · 7 年前

    我有一个包含天文数据的文件需要绘制前几行是这样的:

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

    要将文件读入数据帧,它将提供以下信息:

    enter image description here

    但我希望 Index 待列 1, 2, 3, 4, ... 以及 'no' 待列 1, 4, 5, 6, ... 如文件中所述。

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Matthew Anderson    7 年前

    你不能 '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'])