最近使用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语句来逐一处理。