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

为什么这个分类Python dataframe列行为不正常

  •  0
  • MEdwin  · 技术社区  · 8 年前

    import pandas as pd
    dfg = pd.DataFrame(['A+', 'A', 'A-', 'B+', 'B', 'B-', 'C+', 'C', 'C-', 'D+', 'D'],
                      index=['excellent', 'excellent', 'excellent', 'good', 'good', 'good', 'ok', 'ok', 'ok', 'poor', 'poor'])
    dfg.rename(columns={0: 'Grades'}, inplace=True)
    
    dfg['Grades'] = dfg['Grades'].astype('category',
                                 categories=['D', 'D+', 'C-', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+'],
                                 ordered=True)
    
    grades=dfg['Grades']
    for x in grades:
        print x,x>'C+'
    

    查看我的结果:

    A+ False
    A False
    A- False
    B+ False
    B False
    B- False
    C+ True
    C False
    C- True
    D+ True
    D True
    

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  4
  •   cs95 abhishek58g    8 年前

    它工作得很好。。。作为一系列的操作,也就是说。

    dfg['Grades'] > 'C+'
    
    excellent     True
    excellent     True
    excellent     True
    good          True
    good          True
    good          True
    ok           False
    ok           False
    ok           False
    poor         False
    poor         False
    Name: Grades, dtype: bool
    

    对序列执行逻辑比较时,元素将被视为具有顺序的分类值。

    当你在循环中迭代它们时,你会不经意地把它们当作字符串,所以逻辑上的比较是按字典的方式来评估的。

    “比较字符串C+和D-”和“比较类别C+和D-”是有区别的,这就是这里的实际情况。