python自定义map()函数无法运行

时间:2018-04-17 10:14:32

标签: python pandas dataframe

我想在不同的列中将字符串值映射到整数。我写了一个自定义代码。但是,当我调用代码并通过我的列表时,它什么也没做。有遗漏的语法吗?

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)

1 个答案:

答案 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)