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

  • 相关阅读:
    UiAutomator自动化测试框架介绍
    mongkeyrunner实现循环随机输入值的方法
    python出输出字符串方式:
    Python之字符串小代码解析
    安装JDK,Python SDK及环境变量的配置
    Monkeyrunner小脚本关于camera的使用
    ubuntu 下安装32位库 ia32-libs方法
    关于monkeyrunner的一些初步理解性的题目
    基于redis的限流
    表单防重复提交
  • 原文地址:https://www.cnblogs.com/AndersonX/p/6305545.html
Copyright © 2011-2022 走看看