Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么定义的函数只在设置为变量时才起作用?_Python_Pandas_Dataframe - Fatal编程技术网

Python 为什么定义的函数只在设置为变量时才起作用?

Python 为什么定义的函数只在设置为变量时才起作用?,python,pandas,dataframe,Python,Pandas,Dataframe,我目前正在处理python中的kaggle titanic问题,到目前为止,我已经创建了多个已定义的函数来整理和修改模型的数据,并将其实现到管道中(其中返回的值是数据帧)没有问题。但是,我在创建OHE函数时遇到了一些问题 def OHE_cat (df): OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False) cat_col = [col for col in df.columns if df[col]

我目前正在处理python中的kaggle titanic问题,到目前为止,我已经创建了多个已定义的函数来整理和修改模型的数据,并将其实现到管道中(其中返回的值是数据帧)没有问题。但是,我在创建OHE函数时遇到了一些问题

def OHE_cat (df):
    OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
    cat_col = [col for col in df.columns if df[col].dtype == 'object']
    OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(df[cat_col]))
    OH_cols_train.index = df.index
    df = pd.concat([df, OH_cols_train], axis=1)
    df.drop(cat_col, axis=1, inplace = True)
    return df

OHE_test = bin_test.copy()
OHE_test = OHE_cat(OHE_test)

print (OHE_test.columns)
OHE_test.head()
下面的OHE_cat函数正在返回正确的数据帧,如果我在函数外部执行相同的代码,并且我在每个步骤后都创建了打印(df.columns/index),我可以看到函数本身在整个过程中都在工作

我遇到的主要问题是,只有当我设置OHE_test=OHE_cat(OHE_test)时,该函数才起作用。通常对于我的其他功能,我可以只设置OHE_cat(OHE_测试),它会根据功能调整测试df。但是,我不确定为什么这个函数不能工作

def OHE_cat (df):
    OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
    cat_col = [col for col in df.columns if df[col].dtype == 'object']
    OH_cols_train = pd.DataFrame(OH_encoder.fit_transform(df[cat_col]))
    OH_cols_train.index = df.index
    df = pd.concat([df, OH_cols_train], axis=1)
    df.drop(cat_col, axis=1, inplace = True)
    return df

OHE_test = bin_test.copy()
OHE_test = OHE_cat(OHE_test)

print (OHE_test.columns)
OHE_test.head()
需要(仅通过:OHE_测试=OHE_猫(OHE_测试))获得)

Got:(只有OHE_猫(OHE_测试)

我希望它在不将其设置为OHE_测试=OHE_cat(OHE_测试)的情况下工作的主要原因是,它似乎无法与下面的管道一起工作,而这似乎只有在OHE_cat(OHE_测试)的情况下才可能工作


该函数接受一个参数并返回一些内容。它不会修改您给它的内容,因此如果您想使用它将管道更改为
df=(df.pipe(…).pipe(…)
pipe返回一个新对象,
df
在那里没有更改,您需要重新分配它。如果您事先知道要对哪个df执行操作,并且希望进行就地修改,那么您可以在函数中使用带有df名称的
global
关键字。很高兴为您提供帮助。
Age Embarked    Fare    Pclass  Sex Survived    Ticket  train   Related Title   Deck    Age_was_missing Embarked_was_missing    Fare_was_missing    Ticket_was_missing  Deck_was_missing
PassengerId                                                             
1   Early   S   Low 3.0 male    0.0 Low 1.0 Duo M   Safer   False   False   False   False   True
2   Mid C   High    1.0 female  1.0 High    1.0 Duo MF  Less    False   False   False   False   False
3   Early   S   Low 3.0 female  1.0 Mid 1.0 Solo    NF  Safer   False   False   False   False   True
4   Mid S   High    1.0 female  1.0 Mid 1.0 Duo MF  Less    False   False   False   True    False
5   Mid S   Low 3.0 male    0.0 Mid 1.0 Solo    M   Safer   False   False   False   True    True
def pp_pipeline(df):
    (df.pipe(feature_engineering)
    .pipe(missing_data)
    .pipe(fare_age_bins)
    .pipe(OHE_cat))
    return df