我有一个巨大的TSV(基因组(数据集(1GB大小(,有2504行和220001列。(加载pd.read_table("biallelic-only.raw")
需要1小时11分钟4秒。
除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}))
但是,考虑到我有220001列,不可能将所有列都设置为dtype字典。我想知道是否有一种倒置类型的分配方式。类似于:将除那5列外的所有列设置为category
(。
谢谢!
将数据作为类别读取,并为异常列指定一个转换器,例如,假设一个名为'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
在上面的例子中,cost是异常列,在您的情况下,它应该是['FID', 'IID', 'PAT', 'MAT', 'bmi']
。请注意,转换器字典将取决于您的数据类型(在示例中,cost
是整数列(。