dtype игнорируется при использовании многоуровневых столбцов - PullRequest
0 голосов
/ 15 февраля 2019

При использовании DataFrame.read_csv с многоуровневыми столбцами (читается с header=) панды, похоже, игнорируют ключевое слово dtype=.Есть ли способ заставить панд использовать переданные типы?Я читаю большие наборы данных из CSV и поэтому пытаюсь прочитать данные уже в правильном формате для экономии ресурсов процессора и памяти.

Я попытался передать dict, используя dtype с кортежами и строками.Кажется, что dtype ожидает строки.По крайней мере, я заметил, что если я пройду ключи уровня 0, типы будут назначены, но, к сожалению, это будет означать, что все столбцы с одинаковой меткой уровня 0 получат одинаковый тип.В приведенном ниже примере столбцы (A, int16) и (A, int32) получат тип , объект , а (B, float32) и (B, int16) получат float32 . * 1009.*

import pandas as pd df= pd.DataFrame({ ('A', 'int16'): pd.Series( [1, 2, 3, 4], dtype='int16'), ('A', 'int32'): pd.Series( [132, 232, 332, 432], dtype='int32'), ('B', 'float32'): pd.Series( [1.01, 1.02, 1.03, 1.04], dtype='float32'), ('B', 'int16'): pd.Series( [21, 22, 23, 24], dtype='int16')}) print(df) df.to_csv('test_df.csv') print(df.dtypes) <i># full column name tuples with level 0/1 labels don't work</i> df_new= pd.read_csv('test_df.csv', header=list(range(2)), dtype={ ('A', 'int16'): 'int16', ('A', 'int32'): 'int32'}) print(df_new.dtypes) <i># using the level 0 labels for dtype= seems to work</i> df_new2= pd.read_csv('test_df.csv', header=list(range(2)), dtype={ 'A':'object', 'B': 'float32'}) print(df_new2.dtypes)

Я ожидаю, что второй print(df.dtypes) выведет те же типы столбцов, что и первый print(df.dtypes), но, похоже, он вообще не использует аргумент dtype= ивыводит типы, что приводит к гораздо более интенсивным типам памяти.

Я что-то упустил?

Заранее спасибо Jottbe

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