pandas ранняя типизация данных - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь загрузить относительно большой объем данных из базы данных, и я хотел оптимизировать мой фрейм данных, назначая соответствующие типы данных перед началом загрузки. Но пока что я смог найти, что я могу оптимизировать типы данных только после того, как я загрузил фрейм данных, и я вижу, что это происходит из приведенного ниже кода. Поэтому, если есть какой-либо другой способ раннего назначения типов данных, который действительно помог бы мне управлять требованиями к памяти моего кода.

dbdf = pd.DataFrame(columns=['ID', 'Incr', 'Found'])
dbdf = dbdf.astype({'ID': str, 'Incr': np.int16, 'Found': str})

dbdf = pd.read_sql(
    'SELECT substring_index(ID, \'.\', 2) as ID, Incr, \'Y\' as Found FROM database.',
    conn, coerce_float=True)  # database dataframe

print('$$$$$BEFORE$$$$$')
print(dbdf.memory_usage())
print(dbdf.dtypes)

print('$$$$$AFTER$$$$$')
dbdf = dbdf.astype({'ID': np.float64, 'Incr': np.int16, 'Found': str})
print(dbdf.memory_usage())
print(dbdf.dtypes)

Ниже приведены результаты

$$$$$BEFORE$$$$$
ID        6695328
Incr    6695328
Found      6695328
dtype: int64
ID        object
Incr     int64
found      object

$$$$$AFTER$$$$$
ID        6695328
Incr    1673832
Found      6695328
dtype: int64
ID        float64
Incr      int16
Found       object

1 Ответ

0 голосов
/ 28 февраля 2020

Если вы хотите указать тип столбца перед загрузкой, то есть два варианта (насколько я знаю: P).

  1. Укажите тип столбца, используя cast, в то время как чтение данных sql. (У меня нет знаний по sql, поэтому я не уверен в синтаксисе, поэтому извините за это)

'SELECT cast (ID as float64()), cast (Incr as int()) FROM database'

см. Ссылку

Использование аргумента dtype для указания типа столбца.

pd.read_csv('file.csv', dtype={'ID': str, 'Incr': np.int16, 'Found': str}, conn, coerce_float=True)

Надеюсь, это поможет:)

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