Когда я читаю 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
для каждого столбца, потому что у меня есть десятки.
Есть ли решение?
Я не могу повторить вашу проблему. Однако, 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
Невозможно воспроизвести то, что вы имеете в виду. Добавить более подробную информацию
$ 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
>>>