python中的开关大小写结构
我使用了下面的函数,它获取成员的登录日期和合同长度,并返回一个修改后的数据框,其中包含每个成员的到期日期。该函数按预期工作,但我想知道是否有更干净的方法来编写嵌套函数python中的开关大小写结构,python,pandas,Python,Pandas,我使用了下面的函数,它获取成员的登录日期和合同长度,并返回一个修改后的数据框,其中包含每个成员的到期日期。该函数按预期工作,但我想知道是否有更干净的方法来编写嵌套函数month\u to_num(ind)。我知道python没有实现cases,但是有没有办法重写所有if/elif/else语句 def renewal_date(df): def month_to_num(ind): if (df.loc[ind, "Contract Type"] == "1 Month
month\u to_num(ind)
。我知道python没有实现cases
,但是有没有办法重写所有if/elif/else
语句
def renewal_date(df):
def month_to_num(ind):
if (df.loc[ind, "Contract Type"] == "1 Month"):
return 1
elif (df.loc[ind, "Contract Type"] == "3 Months Prom" or
df.loc[ind, "Contract Type"] == "3 Month"):
return 3
elif (df.loc[ind, "Contract Type"] == "4 Month Promo"):
return 4
elif (df.loc[ind, "Contract Type"] == "6 Months"):
return 6
else:
return 12
for z in range(0, len(df)):
exp_date = (df.loc[z, "Date-Joined"] +
relativedelta(months=+month_to_num(z)))
df.set_value(z,"Date-Renewal", exp_date)
return df
这更适合于,但为了保留功能,您通常会使用字典:
MONTH_NUMS = {
'1 Month': 1,
'3 Months Prom': 3,
'3 Month': 3,
'4 Month Promo': 4,
'6 Months': 6,
}
def month_to_num(ind):
return MONTH_NUMS.get(df.loc[ind, 'Contract Type'], 12)
这就是说,在我们如何将字符串映射到数字的过程中,这里有一点代码味道。您可以将字典与
dict.get()
方法配合使用,如果字典中不存在键,该方法将返回默认值
def renewal_date(df):
def month_to_num(ind):
contract_types = {'1 Month': 1, '3 Months Prom': 3, '4 Month Promo': 4, '6 Months': 6}
return contract_types.get(df.loc[ind, "Contract Type"], 12)
for z in range(0, len(df)):
exp_date = (df.loc[z, "Date-Joined"] +
relativedelta(months=+month_to_num(z)))
df.set_value(z, "Date-Renewal", exp_date)
return df
通常可以使用python字典替换
case
语句或大型if/elif
块