2015-10-20 33 views
1

我有一列,code_x。我將它轉換爲.astype(str)。一些示例值是45362.0, 75345.0, 346157.0, 572575.0。我希望他們都是6位數字。又名:045362, 075345, 346157, 572575熊貓 - 將領先的「0」添加到字符串值,所有值都相等len

我嘗試以下,但它不工作: f3[df3['code_x'].str.len() == 7] = "0" + df3[df3['code_x'].str.len() == 7]['code_x']

建議?

+0

你想右對齊他們加0到左側? –

+0

@AnandSKumar我這麼認爲?我會更新原始問題以舉例說明我想要的內容。謝謝 – As3adTintin

回答

3

即使我跟@DSM使用zfill。但我認爲使用lamba使它更清晰易讀。

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([45362.0, 75345.0, 346157.0, 572575.0], columns=['code_x']) 

In [3]: df.code_x.apply(lambda x: str(int(x)).zfill(6)) 
Out[3]: 
0 045362 
1 075345 
2 346157 
3 572575 
Name: code_x, dtype: object 

注:我們正在轉換一個給定的值轉換爲字符串,以擺脫在結果「.0" 的前詮釋。

2

IIUC,您可以使用str.zfill這意味着你就不必特殊情況下,由長:

In [16]: ser 
Out[16]: 
0  45362 
1  75345 
2 346157 
3 572575 
dtype: float64 

In [17]: ser.astype(str).str.zfill(8) 
Out[17]: 
0 045362.0 
1 075345.0 
2 346157.0 
3 572575.0 
dtype: object 
3

可以使用Series.str.rjust方法右對齊字符串值,並使用8的長度和0作爲填充值。示例 -

df3['code_x'] = df3['code_x'].astype(str).str.rjust(8,'0') 

演示 -

In [65]: df 
Out[65]: 
     A 
0 blah 
1 supbla 
2  a 

In [69]: df['A'].str.rjust(6,'0') 
Out[69]: 
0 00blah 
1 supbla 
2 00000a 
Name: A, dtype: object 
+0

哦,這很有意義。你知道我怎麼能做到這一點,並擺脫0.0,也? .0不是原始數字,而是在我將其轉換爲字符串 – As3adTintin

+1

後出現,如果您要從數字類型轉換,則可以在使用'astype()'轉換爲'str'之前嘗試轉換爲'int'。另一種方法是使用'str.slice'。 –

+0

我不認爲我可以使用'int',因爲原始集合中有一些'NaN'。 – As3adTintin