gpt4 book ai didi

python - Pandas 根据dtype选择列

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:46 24 4
gpt4 key购买 nike

我有一个包含许多列的 pandas 数据框 df 我只想处理我曾尝试过的具有对象数据类型的列

from sklearn.preprocessing import FunctionTransformer
get_cat=FunctionTransformer(lambda x:x if x.dtype==np.dtype(object) else None,validate=False)
get_cat.fit_transform(df)

但是我得到了错误

AttributeError: 'DataFrame' object has no attribute 'dtype'

但如果我对列名执行与

相同的操作
get_cat=FunctionTransformer(lambda x:x[[col_names]],validate=False)

它工作正常。我正在使用 Function transformer 获取 sklearn Pipline 中的数据以进行机器学习。

最佳答案

我认为构建自定义转换器更容易/更清晰。此外,它可以很容易地应用于管道

它可能看起来像这样:

class SelectDtypeColumnsTransfomer(TransformerMixin):

def __init__(self, dtype=object):
self.dtype = dtype

def transform(self, X, **transform_params):
""" X : pandas DataFrame """

columns = X.columns[X.dtypes == self.dtype]
trans = X[columns].copy()
return trans

def fit(self, X, y=None, **fit_params):
return self

一个例子:

df = pd.DataFrame({'A':[1, 2], 'B': ['s', 'd'], 'c':['test', 'r']})
print(SelectDtypeColumnsTransfomer(np.int64).transform(df))
A
0 1
1 2
print(SelectDtypeColumnsTransfomer(object).transform(df))
B c
0 s test
1 d r

关于管道中的使用:

您应该确保训练和测试集中的列具有相同的数据类型。根据您预处理数据的方式,它可能是例如在训练集中,列的类型为 float(包括 nan),而在测试集中,列的类型为 int(无 nan),反之亦然。在这种情况下,您需要调整拟合函数,该函数应在拟合过程中固定列,并进一步考虑确保在管道的以下步骤中保持一致的 dtype

关于python - Pandas 根据dtype选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45499917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com