相关疑难解决方法(0)

管道中的虚拟创建与列车和测试集中的不同级别

我正在探索scikit学习管道.我还想用管道预处理数据.但是,我的列车和测试数据具有不同级别的分类变量.示例:考虑:

import pandas as pd
train = pd.Series(list('abbaa'))
test = pd.Series(list('abcd'))
Run Code Online (Sandbox Code Playgroud)

我用pandas写了一个TransformerMixinClass

class CreateDummies(TransformerMixin):

def transform(self, X, **transformparams):
    return pd.get_dummies(X).copy()

def fit(self, X, y=None, **fitparams):
    return self
Run Code Online (Sandbox Code Playgroud)

fit_transform产生列车数据2列和测试数据4列.所以这并不奇怪,但不适合管道

同样,我试图导入标签编码器(和OneHotEncoder用于潜在的后续步骤):

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
le = LabelEncoder()
le.fit_transform(train)
le.transform(test)
Run Code Online (Sandbox Code Playgroud)

这并不奇怪,这会产生错误.

所以这里的问题是我需要测试集中包含的一些信息.有没有一种好方法将其包含在管道中?

python pandas scikit-learn

9
推荐指数
1
解决办法
4125
查看次数

熊猫分类类型不起作用

我厌倦了将专栏更改为catgeory使用http://pandas.pydata.org/pandas-docs/stable/categorical.html中的文档

df = pd.DataFrame({'A':[1,2,3,4,5], 'B':['a','b','c','d','e'], 'C':['A','B','A','B','A']})
df['C']=df['C'].astype('category')
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过类别

df['C']=df['C'].astype('category',categories=['A','B'])
Run Code Online (Sandbox Code Playgroud)

说错了

TypeError: _astype() got an unexpected keyword argument 'categories'
Run Code Online (Sandbox Code Playgroud)

什么是将类别传递给的正确方法astype()

pandas

5
推荐指数
1
解决办法
1770
查看次数

多个插入列如果不存在熊猫

我有以下 df

list_columns = ['A', 'B', 'C']
list_data = [
    [1, '2', 3],
    [4, '4', 5],
    [1, '2', 3],
    [4, '4', 6]
    ]
df = pd.DataFrame(columns=list_columns, data=list_data)
Run Code Online (Sandbox Code Playgroud)

我想检查是否存在多个列,如果不创建它们。

示例:如果 B、C、D 不存在,则创建它们(对于上述 df 它将仅创建 D 列)我知道如何使用一列执行此操作:

if 'D' not in df:
    df['D']=0
Run Code Online (Sandbox Code Playgroud)

有没有办法测试我的所有列是否都存在,如果不存在,则创建缺少的列?并且不要为每一列做一个 if

python pandas

5
推荐指数
1
解决办法
1812
查看次数

当 pandas 列中不存在某些类别时获取虚拟值

假设我有一个 pandas 专栏,如下所示

类型
类型1
类型2
类型3

现在我将采用以下虚拟模型:
type_dummies = pd.get_dummies(["Type"], prefix="type")

然后将其与主 DataFrame 连接后,生成的 df 将如下所示:

df.drop(['Type'], axis=1, inplace=True)
df = df.join(type_dummies)
df.head()

type_type1    type_type2    type_type3
   1              0             0
   0              1             0
   0              0             1
Run Code Online (Sandbox Code Playgroud)

但是,如果我的训练集中有另一个类别(如列type4中所示)怎么办?Type那么我将如何使用get_dummies()方法来生成我想要的虚拟对象。也就是说,在这种情况下我想生成 4 个虚拟变量,尽管所需列中只有 3 个类别?

python data-processing dataframe pandas data-science

3
推荐指数
1
解决办法
2487
查看次数