2017-08-04 70 views
0

嘿我看了一些帖子,但我找不到直接的答案。我正在研究一個有兩列ZipCode和ZipCodePlusFour的pandas DataFrame。一些ZipCodePlusFour單元被填充。所有ZipCode單元格都被填充。問題是ZipCode有9位數字。所以我試圖擺脫9位ZipCodes的最後4位數字並將它們放入ZipCodePLusFour中。lambda if語句或什麼也不做熊貓

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語句做它應該做的事情,但其他事情不應該做任何事情。我嘗試過放入None,但它用None填充單元格,而不是保留單元格中已有的值。

+3

'別人x'保持原樣 –

+0

我覺得解決這個問題,你應該刪除'else'部分? –

+0

邏輯是*,如果字符串有6個或更多字符,則將其修剪到最後4個字符,如果它有5個字符,則將其保留爲5 * ...?只是爲了避免這種情況可能會導致錯誤,因爲如果規則只是「修剪爲最多4個字符」,那麼根本就不需要「if..else」。 – deceze

回答

0

如果傳遞的是小於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:]) 
+0

謝謝你這是完美的。 – Katan

0

所有你想要的是修剪字符串到5個地方。你可以做df.ZipCode.str[:5]

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

因爲,5位郵編

In [79]: df.ZipCode.str[:5] 
Out[79]: 
0 12345 
1  123 
2  0 
Name: ZipCode, dtype: object 

因爲,額外的(> 5)字符部分郵編

In [80]: df.ZipCode.str[5:] 
Out[80]: 
0 6789 
1 
2 
Name: ZipCode, dtype: object