[英]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.