У меня есть фрейм данных pandas, который, скажем, предназначен для представления «матрицы путаницы» (т. Е. Индекс и столбцы одинаковы). Каждый индекс / столбец представлен с плавающей точкой, поскольку это соответствует явным, заранее определенным значениям вопросника.
Однако это создает проблему, поскольку использование представлений с плавающей точкой в пандах опасно. Пример:
Скажите, у меня есть этот код:
>>> 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', ...]
и т. Д. Я не могу себе представить, что нет лучшего способа заставить подобные вещи работать.
Я что-то упускаю из виду?
EDIT . Я понимаю, что когда я печатаю, как это часто бывает, когда задаю вопрос о SO, я мог бы просто создать индексный массив, используя форматирование строки. Но я открыт для других предложений в случае, если кто-то может порекомендовать что-то еще более очевидное (особенно, если речь идет о , а не с использованием строк в первую очередь).