Python 为什么定义的函数只在设置为变量时才起作用?
我目前正在处理python中的kaggle titanic问题,到目前为止,我已经创建了多个已定义的函数来整理和修改模型的数据,并将其实现到管道中(其中返回的值是数据帧)没有问题。但是,我在创建OHE函数时遇到了一些问题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]
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