Панды read_csv для gziped файла не выводят числовые типы столбцов

1

Когда я читаю CSV файл, используя:

train_data= pd.read_csv("train.pk", header=True, encoding='Latin-1')

Я получаю все типы столбцов, которые выводятся довольно точно. Например, IDs с любой длиной заключаются в int64.

Теперь, делая то же самое, с gziped файлом, pandas делают их объектами.

train_data= pd.read_csv("train.pk", header=0, compression='gzip', encoding='Latin-1')

Интересно, что числа, которые как 5 или менее цифр, выведены как int64.

Я не хочу вручную применять pandas.to_numeric для каждого столбца, потому что у меня есть десятки.

Есть ли решение?

Теги:
pandas
dataframe

2 ответа

1
Лучший ответ

Я не могу повторить вашу проблему. Однако, downcasting не должно быть ручным процессом. Вы можете выбрать целочисленные столбцы через pd.DataFrame.select_dtypes:

df = pd.DataFrame({'a': pd.Series([1, 2, 3], dtype='int64'),
                   'b': pd.Series([10000000, 20000000, 300000000], dtype='int64')})

numerics = ['int8', 'int16', 'int32', 'int64']

for col in df.select_dtypes(include=numerics).columns:
    df[col] = pd.to_numeric(df[col], downcast='integer')

print(df.dtypes)

a     int8
b    int32
dtype: object
0

Невозможно воспроизвести то, что вы имеете в виду. Добавить более подробную информацию

$ cat /tmp/train.csv
id,name
100001,facebook
20000,google
300001,apple
$ cat /tmp/train.csv | gzip >   /tmp/train.csv.gz
$ python
>>> import pandas as pd
>>> pd.read_csv("/tmp/train.csv").dtypes
id       int64
name    object
dtype: object
>>> pd.read_csv("/tmp/train.csv.gz", compression="gzip").dtypes
id       int64
name    object
dtype: object
>>>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню