zoukankan      html  css  js  c++  java
  • 关于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语句来逐一处理。

  • 相关阅读:
    整数划分《递归法》
    hdu 1224 Free DIY Tour
    HTTP Response Status Code HTTP响应代码中文详解
    Webserive学习站点
    页面的回传与回调
    JS中apply和call函数的运用
    SOAP协议详解
    JS在firefox和IE下差异及解决方案
    关于路径的问题
    .NET中IDisposable接口的基本使用 (转)
  • 原文地址:https://www.cnblogs.com/AndersonX/p/6305545.html
Copyright © 2011-2022 走看看