gziped文件的pandas read_csv不会推断数字列类型

时间:2018-06-18 15:01:48

标签: python pandas dataframe

当我使用以下内容阅读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') ,因为我有几十个。

有解决方案吗?

2 个答案:

答案 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
>>>