2017-08-27 23 views
1

我正在從多個csv中讀取數據,應用一些過濾器並將它們合併到一個數據框中。 csv中的原始數據只是數字/分數。熊貓正在將它們轉換成浮動。這很好,但我只需要1列保持原樣。要轉換回整,我想:在Python中選擇性地將float轉換爲整數和小數pandas

df['PRICE']=df['PRICE'].astype(int) 

此作品爲精彩的整數。但是,這也將所有小數轉換爲整數。這意味着,即使

1162.50 --> 1162 

我期待改變它的東西,如:

1152.0 --> 1152 
1216.50 --> 1216.5 
1226.65 --> 1226.65 

在此先感謝

回答

2

使用pd.DataFrame構造與dtype=object您可以重新初始化數據框:

print(df) 

     Col1 
0 1152.00 
1 1216.50 
2 1226.65 

df = pd.DataFrame(df, dtype=object) 
print(df) 

     Col1 
0  1152 
1 1216.5 
2 1226.65 

或者,如果它只是一列你想con VERT,您可以使用pd.Series構造以同樣的方式:

df.Col1 = pd.Series(df.Col1, dtype=object) 
print(df) 

     Col1 
0  1152 
1 1216.5 
2 1226.65 

法定警告:在數據幀具有混合類型殺死所有的優化和加速,大熊貓/ numpy的提供了純數字類型的好處。


上面的方法概述了一種方法來保留數值屬性,但如果你想保存到CSV,你必須轉換爲字符串,並截斷,否則會保存時被強制轉換爲浮動。這是你怎麼做的:

out = df.astype(str).replace('\.0+$', '', regex=True) 
print(out) 

     Col1 
0  1152 
1 1216.5 
2 1226.65 

out.to_csv('out.csv') 
+0

感謝您的快速幫助。我可以在python數據框中看到所需的輸出。但是,當我使用df.to_csv將此修改後的df寫入csv時,它將值存儲爲float而不是object。我在這裏做錯了什麼?請指導。 – user3017186

+0

如果有幫助,我需要保留原始格式爲1列。因爲,這必須附加另一列。 確定其餘列轉換爲浮動數據操作不會影響 – user3017186

+0

@ user3017186不幸的是,'df.to_csv'目前不提供對此的支持。列被強制爲int,string或float。如果你看到我的編輯,我提供了一個涉及字符串操作的解決方法。檢查一下,如果你認爲它有幫助,請接受我的回答。 –