Python lambda if语句或不执行任何操作
嘿,我浏览了一些帖子,但是我找不到直接的答案。我正在研究一个熊猫数据框架,它有两列ZipCode和ZipCodePlusFour。一些ZipCodePlusFour单元格已填充。所有ZipCode单元都已填充。问题是ZipCode有9位数字。所以我试着去掉9位数ZipCode的最后4位数,把它们放在ZipCodePlusfur中Python lambda if语句或不执行任何操作,python,pandas,lambda,Python,Pandas,Lambda,嘿,我浏览了一些帖子,但是我找不到直接的答案。我正在研究一个熊猫数据框架,它有两列ZipCode和ZipCodePlusFour。一些ZipCodePlusFour单元格已填充。所有ZipCode单元都已填充。问题是ZipCode有9位数字。所以我试着去掉9位数ZipCode的最后4位数,把它们放在ZipCodePlusfur中 df['ZipCode'] = df.ZipCode.astype(str) # just in case df['ZipCodePlusFour'] = df.Zi
df['ZipCode'] = df.ZipCode.astype(str) # just in case
df['ZipCodePlusFour'] = df.ZipCode.apply(lambda x: x[-4:] if len(x) > 5 else None)
df['ZipCode'] = df.ZipCode.apply(lambda x: x[:-4] if len(x) > 5 else
我的问题在第二行。if语句执行它应该执行的操作,而else语句不应该执行任何操作。我尝试放置None,但它使用None填充单元格,而不是保留单元格中已有的值 如果您传递的值长度小于5位,您可以这样做:
df['ZipCode'] = df.ZipCode.apply(lambda x: x[-4:] if len(x) > 5 else x)
但您可以做得更简单,无需检查长度:
df['ZipCode'] = df.ZipCode.apply(lambda x: x[-4:])
您只需将字符串修剪到atmost 5个位置。您可以执行
df.ZipCode.str[:5]
In [78]: df
Out[78]:
ZipCode
0 123456789
1 123
2 0
对于,5个位置的zipcodes
In [79]: df.ZipCode.str[:5]
Out[79]:
0 12345
1 123
2 0
Name: ZipCode, dtype: object
对于,zipcodes中的额外(>5)字符部分
In [80]: df.ZipCode.str[5:]
Out[80]:
0 6789
1
2
Name: ZipCode, dtype: object
else x
要保持原样,我认为要解决这个问题,您应该删除else
部分?逻辑是,如果字符串有6个或更多字符,请将其修剪到最后4个,如果有5个字符,请保留在5…?如果这可能是一个off-by-one错误,请询问,因为如果规则只是简单地假设为“最多4个字符”,那么就根本不需要if..else
。@JackParkinson您可以删除lambda语句中的其他内容吗?实际上我不确定您是否可以-我可能有点厚:/谢谢您,这太完美了。