Pandas самый эффективный магазин NUMERI C (8,3) в dtype? - PullRequest
0 голосов
/ 19 апреля 2020

Pandas / numpy поставляются с множеством dtypes для числовых значений.

Из соображений памяти и вычислений я стараюсь быть максимально понятным.

Исходя из postgres мира , я пытаюсь привести NUMERIC(8,3) к подходящему dtype.

Легко сказать, NUMERC(8,3) может представлять все числа с пятью цифрами до и 3 цифрами после точки (IT парень в математике ..). Макс. будет 9999.99, мин. 0.

. Есть ли в pandas более точные типы данных / numpy, чтобы определить это как postgresql? В каком виде dtype такое значение должно храниться?

df['my_numeric'] = df['my_numeric'].as_type('???')

РЕДАКТИРОВАТЬ после двух ответов:

Я больше изучаю расходы меньше места. Например, df.memory_usage() на кадре данных размером 374 КБ, показывает 3 МБ на float64, 1,5 МБ на float32, 750 КБ на 16-битном и 375 КБ на 8-битном столбце.

Так что, если я правильно понял, мне нужно 13 бит для основного числа и 7 бит для точности. float 64 имеет 11-битную экспоненту, 52-битную мантиссу и может хранить все значения. Но для этого также требуется больше памяти, чем было бы на самом деле необходимо.

1 Ответ

0 голосов
/ 19 апреля 2020

Это то, что вам нужно clip?

s
0    100000.000000
1         0.123457
dtype: float64
s.round(2).clip(lower=0.01,upper=9999.99)
0    9999.99
1       0.12
dtype: float64
...