關於pandas精度控制


最近使用pandas處理一批數據,數據中包含幾個columns,它們的數據精度,例如

3.25165,1451684684168.0,0.23

處理完之后保存csv時發現,1451684684168.0被保存為1.45168e+12,我需要完全保存數據信息

Google一番發現pandas自帶了如下函數:

DataFrame.to_csv('out.csv', float_format = '%.3f')

由於我的文件中包含不同精度數據,不能一概而論,所以初步想法是想把1451684684168.0轉換為str處理,

有以下幾種辦法:

1.df['id'].apply(str)或者df['id'].astype(basestring)

這個方法可以將某個column變為str,缺點是不能控制精度,轉出來還是1.45168e+12

2.pandas.DataFrame.to_string或者pandas.Series.to_string

這個兩種方法可以將整個DataFrame或者Series轉成str,參數很多,而且可以控制精度。

需要注意的是參數formatters和float_format,它們兩的參數是以函數的形式給出的

######################################################

myformatter = lambda x: '%4.1f' % x
formatters = {'A': myformatter}
float_format = myformatter

######################################################

由於我使用的是pd(0.17.1)版本,與官方的0.19.2的不同,

pandas.Series.to_string參數中缺少index

所以我將Series轉換為DataFrame處理,下面給出代碼:

#####################################################

Tpart1 = dfN.iloc[:,0:12]
Tpart2 = dfN.iloc[:,12]
Tpart3 = dfN.iloc[:,13:16]

myformat = lambda x: '%.0f'%x   # #保留整數
str1 = pd.DataFrame(Tpart2, columns=['time'])
str2 = str1.to_string(float_format = myformat, index = False, header = False)  # #去除column name以及index name
str3 = str2.split('\n')
Tpart2 = pd.DataFrame(str3, columns=['time'])   ##重新變為DataFrame

npart1 = pd.concat([Tpart1, Tpart2, Tpart3], axis = 1)  # #合並

#######################################################

pandas的向量處理速度還是很快的,程序中盡量不使用for語句來逐一處理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM