2016-03-17 3 views
2

Я пытаюсь добавить некоторые нули в zipcodes, которые поступают в числовом формате. Я думал, что это будет работать (он работал в подобных ситуациях с .str.startswith() Любые предложенияPandas update column на основе текущих значений

data['loczipstr'] = data['loczip'].astype(str) 
data['loczipstr'] = np.where(len(data['loczipstr']) == 3, "0000" +data['loczipstr'], data['loczipstr']) 
data['loczipstr'] = np.where(len(data['loczipstr']) == 4, "000" + data['loczipstr'], data['loczipstr']) 
data['loczipstr'] = np.where(len(data['loczipstr']) == 5, "00" + data['loczipstr'], data['loczipstr']) 
data['loczipstr'] = np.where(len(data['loczipstr']) == 6, "0" + data['loczipstr'], data['loczipstr']) 

Линии выполнения, но затем не меняют data['loczipstr'] вообще

примечание:.?. Длины в диапазоне от 3 до 6 потому что четыре цифры Почтовые индексы выглядят как 1023.0, таким образом, длина голец 6

+1

На самом деле не так просто 'zfill'ing на 7 строк длины? – EdChum

ответ

3

Преобразование ФР в str, а затем использовать vectorised str.zfill на max длиной 7:

In [76]: 
df['loczipstr'] = df['loczip'].astype(str).str.zfill(7) 
df 

Out[76]: 
    loczip loczipstr 
0  111 0000111 
1  11111 0011111 
2 111111 0111111 
3 1111111 1111111 
4 11111111 11111111 
+0

oh не знал о команде. благодаря! – As3adTintin

1

Вы можете использовать loc и создать mask с str.len:

print data 
    loczip 
0  111 
1  11111 
2 111111 
3 1111111 
4 11111111 

data['loczipstr'] = data['loczip'].astype(str) 

data.loc[data['loczipstr'].str.len() == 3, 'loczipstr'] = "0000" + data['loczipstr'] 
data.loc[data['loczipstr'].str.len() == 4, 'loczipstr'] = "000" + data['loczipstr'] 
data.loc[data['loczipstr'].str.len() == 5, 'loczipstr'] = "00" + data['loczipstr'] 
data.loc[data['loczipstr'].str.len() == 6, 'loczipstr'] = "0" + data['loczipstr'] 
print data 
    loczip loczipstr 
0  111 0000111 
1  11111 0011111 
2 111111 0111111 
3 1111111 1111111 
4 11111111 11111111 
+0

спасибо! примет позже. Я не часто использую 'loc', я должен, вероятно, посмотреть, что – As3adTintin

Смежные вопросы