pandas to_csv:用混合类型抑制数据框架的科学概念

时间:2018-03-09 01:16:44

标签: python pandas

我有一个Pandas数据框,其中包含多个列,其类型为float64或字符串。我试图使用to_csv将数据帧写入输出文件。然而,它输出了具有科学概念的大数字。例如,如果数字是1344154454156.992676,则它在文件中保存为1.344154e + 12。

如何抑制to_csv的科学概念并保留输出文件中的数字?我曾尝试在float_format函数中使用to_csv参数,但由于数据框中还有包含字符串的列,因此它已经崩溃。

以下是一些示例代码:

import pandas as pd
import numpy as np
import os

df = pd.DataFrame({'names': ['a','b','c'], 
                   'values': np.random.rand(3)*100000000000000})

df.to_csv('example.csv')

os.system("cat example.csv")
 ,names,values
0,a,9.41843213808e+13
1,b,2.23837359193e+13
2,c,9.91801198906e+13

# if i set up float_format:
df.to_csv('example.csv',  float_format='{:f}'.format)

ValueError: Unknown format code 'f' for object of type 'str'

如何在没有科学概念的情况下获取csv中保存的数据?

  names                values
0     a 94184321380806.796875
1     b 22383735919307.046875
2     c 99180119890642.859375

3 个答案:

答案 0 :(得分:3)

float_format参数应该是str,而是使用它

df.to_csv('example.csv', float_format='%f')

答案 1 :(得分:0)

尝试设置像这样的选项

pd.set_option('float_format', '{:f}'.format)

答案 2 :(得分:0)

  

对于python 3.xx(在3.6.5和3.7上测试):

Options and Settings

For visualization of the dataframe pandas.set_option

import pandas as pd #import pandas package

# for visualisation fo the float data once we read the float data:

pd.set_option('display.html.table_schema', True) # to can see the dataframe/table as a html
pd.set_option('display.precision', 5) # setting up the precision point so can see the data how looks, here is 5
df = pd.DataFrame({'names': ['a','b','c'], 
               'values': np.random.rand(3)*100000000000000}) # generate random dataframe

数据输出:

df.dtypes # check datatype for columns

[output]:
names      object
values    float64
dtype: object

数据框:

df # output of the dataframe

[output]:
    names   values
0   a   6.56726e+13
1   b   1.63821e+13
2   c   7.63814e+13

现在使用 float_format ='%。13f'参数写 to_csv

df.to_csv('estc.csv',sep=',', float_format='%.13f') # write with precision .13

文件输出:

,names,values
0,a,65672589530749.0703125000000
1,b,16382088158236.9062500000000
2,c,76381375369817.2968750000000

现在使用 float_format ='%f'参数写 to_csv

df.to_csv('estc.csv',sep=',', float_format='%f') # this will remove the extra zeros after the '.'

文件输出:

,names,values
0,a,65672589530749.070312
1,b,16382088158236.906250
2,c,76381375369817.296875

For more details check pandas.DataFrame.to_csv