lambda如果声明或什么都不做的熊猫

时间:2017-08-04 14:17:39

标签: python pandas lambda

嘿,我查看了一些帖子,但我找不到直接答案。我正在开发一个pandas DataFrame,它有两列ZipCode和ZipCodePlusFour。部分ZipCodePlusFour单元格已填充。所有ZipCode单元格都已填充。问题是ZipCode有9位数。所以我试图摆脱9位Zipcodes的最后4位数字并将它们放在ZipCodePLusFour中。

{{subtract 35 price.without_tax.value}}

我的问题出在第二行。 if语句执行它应该执行的操作但是else应该什么都不做。我尝试使用None,但它使用None填充单元格,而不是保留已经在单元格中的值。

2 个答案:

答案 0 :(得分:1)

如果传递的长度小于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:])

答案 1 :(得分:0)

你想要的只是将字符串修剪到最多5个位置。你可以df.ZipCode.str[:5]

In [78]: df
Out[78]:
     ZipCode
0  123456789
1        123
2          0

For,5 place 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