Самый элегантный способ симулировать плавающие столбцы и индексировать в пандах - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть фрейм данных 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, я мог бы просто создать индексный массив, используя форматирование строки. Но я открыт для других предложений в случае, если кто-то может порекомендовать что-то еще более очевидное (особенно, если речь идет о , а не с использованием строк в первую очередь).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...