为什么这个分类的Python数据框列行为异常

时间:2018-08-15 16:30:08

标签: python pandas

我似乎不明白为什么对本专栏进行了归类。一个简单的比较失败。

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 个答案:

答案 0 :(得分:4)

它可以正常工作……作为系列操作。

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-”之间存在区别,这实际上就是发生的情况。