簡體   English   中英

如何從 csv/tsv 加載 Pandas DataFrame 作為分解類別類型?

[英]How to load a Pandas DataFrame from a csv/tsv as factorize category type?

我有一個巨大的 TSV(基因組)數據集(1GB 大小),它有 2,504 行和 220,001 列。 (需要 1h 11min 4s 加載pd.read_table("biallelic-only.raw")

所有列,但其中 5 列都是分類數據,我想將它們轉換為分解類別。

對於小樣本,此代碼可以很好地解決:

data = pd.read_table("biallelic-only.raw")
categorical_feats = [
    f for f in data.columns if f not in ['FID', 'IID', 'PAT', 'MAT', 'bmi']
]

categorical_feats
for f in categorical_feats:
    data[f], _ = pd.factorize(data[f])
    data[f] = data[f].astype('category')

但是對於這個巨大的,它需要很長時間。

我的問題是,是否可以將已經作為分解類別的數據集加載,而不是稍后再轉換?

我知道我們可以做這樣的事情:

pd.read_csv('file', dtype={'col_name':type}))

但是,鑒於我有 220,001 列,不可能將它們全部設置為 dtype 字典。 我想知道是否有倒排類型的分配方式。 類似於:將所有列設置為category除了那 5 個列)。

謝謝!

將數據作為分類讀取並為異常列指定轉換器,例如,假設名為'data.csv'的玩具文件具有以下數據:

name  type   cost
AB     B      1
CV     G      4
54     B      31
AB     B      2

你可以這樣做:

import pandas as pd

df = pd.read_csv('data.csv', dtype='category', converters={'cost': int}, delim_whitespace=True)
print(df.dtypes)

輸出

name    category
type    category
cost       int64
dtype: object

在上面的示例中,成本是例外列,在您的情況下,它應該是['FID', 'IID', 'PAT', 'MAT', 'bmi'] 請注意,轉換器字典將取決於您的數據類型(在示例中cost是一個整數列)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM