当我使用以下内容阅读CSV文件时
dlopen
我可以非常准确地推断所有列类型。例如,train_data= pd.read_csv("train.pk", header=True, encoding='Latin-1')
推断出任意长度的IDs
。
现在,使用gziped文件,pandas将它们推断为Objects。
int64
有趣的是,数字为5或更少的数字,推断为int64。
我不想在每一列上手动应用train_data= pd.read_csv("train.pk", header=0, compression='gzip', encoding='Latin-1')
,因为我有几十个。
有解决方案吗?
答案 0 :(得分:1)
我无法复制你的问题。但是,向下转换不一定是手动过程。您可以通过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
答案 1 :(得分: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
>>>