我有一个熊猫数据框,可以说它代表一个“混淆矩阵”(即索引和列是相同的)。每个索引/列均以浮点数表示,因为它对应于明确的预定调查表值。
但是,这带来了一个问题,因为众所周知在熊猫中使用浮点表示是一件危险的事情。示例:
说我有这个代码:
>>> import numpy, pandas
>>> Labels = numpy.arange(1, 3.5, 0.2)
>>> Data = numpy.random.randint( low = 0, high = 100, size = (13,13) )
>>> DF = pandas.DataFrame( index = Labels, columns = Labels, data = Data )
产生一个看起来很可爱的数据框:
>>> DF
1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4
1.0 77 35 5 40 9 45 14 85 16 63 43 72 92
1.2 96 93 12 87 14 3 79 53 19 53 4 41 47
1.4 1 79 9 94 95 52 64 71 97 2 57 12 75
1.6 55 48 55 14 90 57 75 39 16 86 42 41 50
1.8 31 60 10 89 70 66 31 74 87 26 83 17 77
2.0 95 27 77 59 54 31 73 22 64 49 84 38 47
2.2 66 49 66 28 91 74 54 85 62 56 36 18 39
2.4 38 59 89 90 44 22 66 92 29 22 71 22 89
2.6 58 42 46 88 86 29 1 34 38 76 27 73 6
2.8 14 5 80 61 5 18 44 76 84 21 42 87 82
3.0 41 67 37 64 92 50 61 48 49 43 47 37 81
3.2 29 99 47 10 61 17 28 35 7 30 37 70 33
3.4 56 95 21 12 48 31 61 71 41 19 13 14 52
如果我尝试在视觉报告的索引/列上获取值:
>>> DF.get_value(2.0, 2.0)
[...]
KeyError: 2.0
当然的原因是,标签内部与仅“漂亮”打印时所显示的内容有所不同。例如:
>>> Labels
array([1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4])
>>> [str(i) for i in Labels]
['1.0', '1.2', '1.4', '1.5999999999999999', '1.7999999999999998', '1.9999999999999998', '2.1999999999999997', '2.3999999999999995', '2.5999999999999996', '2.8', '2.9999999999999996', '3.1999999999999993', '3.3999999999999995']
我很高兴使用字符串而不是浮点数作为索引(即类似DF.get_value('2.0', '2.0')
之类的东西),但是,我不想手工编写类似['1.0', '1.2', '1.4', ...]
之类的东西。我无法想象没有更好的方法来使这种事情起作用。
我缺少明显的东西吗?
编辑。我在输入时就意识到,就像在SO上提问时的常见情况一样,我可以简单地使用字符串格式创建索引数组。但是我愿意接受其他建议,以防有人可以提出更明显的建议(特别是如果涉及到不首先使用字符串)。