Python pandas to_csv浮点格式任意精度,无需工程格式化

Python pandas to_csv浮点格式任意精度,无需工程格式化,python,pandas,precision,export-to-csv,Python,Pandas,Precision,Export To Csv,我有一个熊猫数据帧,具有任意大小的值,其大小是先验未知的,比如: 默认显示将某些数字转换为工程格式 >>> df a b 0 1.000000e-07 4.0 1 2.000000e+00 5000000.0 2 3.000000e+00 0.6 我不在乎。然而,我的目标是在不使用工程格式的情况下将其写入csv文件,同时也不打印不必要的0。要求的第二部分是控制文件大小,因为有数百万行 例如,如果

我有一个熊猫数据帧,具有任意大小的值,其大小是先验未知的,比如:

默认显示将某些数字转换为工程格式

>>> df
              a          b
0  1.000000e-07        4.0
1  2.000000e+00  5000000.0
2  3.000000e+00        0.6
我不在乎。然而,我的目标是在不使用工程格式的情况下将其写入csv文件,同时也不打印不必要的0。要求的第二部分是控制文件大小,因为有数百万行

例如,如果我运行df.to_csvcsv_文件,则该文件如下所示

,a,b
0,1e-07,4.0
1,2.0,5000000.0
2,3.0,0.6
如果我运行df.to_csvcsv_文件,float_format=%.7f,那么看起来应该注意所有不必要的0:

,a,b
0,0.0000001,4.0000000
1,2.0000000,5000000.0000000
2,3.0000000,0.6000000
我希望在输出文件中包含以下内容:

,a,b
0,0.0000001,4.0
1,2.0,5000000.0
2,3.0,0.6
有没有一个简单的方法来实现这一点

import pandas as pd   
df = pd.DataFrame({'a' : [0.0000001, 2, 3], 'b' : [4, 5000000, 0.6]})   


def export_formatted(df, csv_path, cols=None):

    # By default, format all columns in df
    if cols==None:
        cols = df.columns

    # Change columns to strings with 0's stripped as desired
    for c in cols:
        df[c] = df[c].map('{:,.15f}'.format).str.rstrip('0')

    # export
    df.to_csv(csv_path)

export_formatted(df, 'stack_overflow_scratch2.csv')
如果我认为您需要以下内容:

    a               b
0   0.0000001       4
1   2               5000000
2   3               0.6

答案是Thx,b/c不太有效。7f必须硬编码,但我事先不知道数字的小数位数是多少。特别是,如果我的数据中有一个0.000000001,你的函数会将它截断为0,对吗?这不是期望的结果……是否有一个您觉得足够保守的十进制精度级别?像.15f?因为那样的话,硬编码.15f还是可以的,你仍然只输出你需要的数字。如果你真的想,你甚至可以使用float允许的最大位数。
    a               b
0   0.0000001       4
1   2               5000000
2   3               0.6