我想在不同的列中将字符串值映射到整数。我写了一个自定义代码。但是,当我调用代码并通过我的列表时,它什么也没做。有遗漏的语法吗?
def encode_cols(myList = [], *args):
for col in myList:
if col == 'Lot Shape':
df[col] = df[col].map({'Reg':4, 'IR1':3, 'IR2':2, 'IR3':1})
if col == 'Utilities':
df[col] = df[col].map({'AllPub':4, 'NoSwer':3, 'NoSeWa':2, 'ELO':1})
if col == 'Land Slope':
df[col] = df[col].map({'Gtl':3, 'Mod':2,'Sev':1})
lst = ['Lot Shape','Utilities','Land Slope']
encode_cols(lst)
答案 0 :(得分:1)
您的函数什么都不返回,而且您的列表没有正确定义。
更多Pandonic选项是使用pd.DataFrame.pipe
:
def encode_cols(df, myList):
for col in myList:
if col == 'Lot Shape':
df[col] = df[col].map({'Reg':4, 'IR1':3, 'IR2':2, 'IR3':1})
if col == 'Utilities':
df[col] = df[col].map({'AllPub':4, 'NoSwer':3, 'NoSeWa':2, 'ELO':1})
if col == 'Land Slope':
df[col] = df[col].map({'Gtl':3, 'Mod':2,'Sev':1})
return df
lst = ['Lot Shape', 'Utilities', 'Land Slope']
df = df.pipe(encode_cols, lst)