代码之家  ›  专栏  ›  技术社区  ›  Curcuma_

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

  •  1
  • Curcuma_  · 技术社区  · 8 年前

    当我使用以下命令读取csv文件时:

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

    我非常精确地推断出所有的列类型。例如 IDs 任何长度都可以推断 int64 .

    现在,同样的,用GZIPD文件,熊猫推断它们作为对象。

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

    有趣的是,5位或更少的数字被推断为int64。

    我不想手动申请 pandas.to_numeric 在每一列,因为我有几十个。

    有解决办法吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   jpp    8 年前

    我不能复制你的问题。然而,下浇铸不需要手动操作。您可以通过 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
    
        2
  •  0
  •   sathyz    8 年前

    无法再现你的意思。添加更多详细信息

    $ 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
    >>>