大熊猫D型
问题描述:
的基础上,选择列我有一个熊猫数据帧DF具有很多列,我只想要处理的对象数据类型的列,我曾试图大熊猫D型
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)
其工作的罚款。 我正在使用函数变换器来获取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
关于在管道中使用:
你应确保训练和测试集中的列具有相同的dtype。取决于你如何预处理数据,可能是例如在训练集中,一列是浮点类型(包括一个nan),而在测试集中它是int类型(无nan),反之亦然。在这种情况下,您需要调整适配功能,以便在安装过程中固定柱子,并进一步考虑确保管道的以下步骤中的一致性dtype
答
你可以使用一些类似这样的
df_dtypes = df.dtypes.values.tolist()
select_dtype = np.dtype('int64')
select_cols = [True if x == select_dtype else False for x in df_dtypes]
那么,您的问题是什么?添加更多细节,如果可能的话还有更多代码 –
我已更新我的问题。 –