2014-04-10 31 views
5

我正在给csv写一个熊猫df。当我将它写入一个csv文件时,其中一列中的某些元素被错误地转换为科学记数法/数字。例如,col_1中有字符串,例如'104D59'。这些字符串通常在csv文件中表示为字符串,就像它们应该是的一样。然而,偶尔的字符串,例如'104E59'正被转换成科学记数法(例如1.04 E 61),并在随后的csv文件中被表示为整数。pandas to_csv:在向csv写入熊猫时,在csv文件中禁止科学记数法

我试图将csv文件导出到一个软件包(即pandas - > csv - > software_new),这种数据类型的改变导致了导出问题。

有没有办法将df写入csv,确保df ['problem_col']中的所有元素在结果csv中表示为字符串还是不转换为科学记数法?

这里是我已经使用写熊猫DF到CSV的代码: df.to_csv(“df.csv”,编码=“UTF-8”)

我也查询的所述D型问题列: 为df.dtype,DF [ 'problem_column']是一个对象

回答

6

使用float_format说法:

In [11]: df = pd.DataFrame(np.random.randn(3, 3) * 10 ** 12) 

In [12]: df 
Out[12]: 
       0    1    2 
0 1.757189e+12 -1.083016e+12 5.812695e+11 
1 7.889034e+11 5.984651e+11 2.138096e+11 
2 -8.291878e+11 1.034696e+12 8.640301e+08 

In [13]: print(df.to_string(float_format='{:f}'.format)) 
        0      1     2 
0 1757188536437.788086 -1083016404775.687134 581269533538.170288 
1 788903446803.216797 598465111695.240601 213809584103.112457 
2 -829187757358.493286 1034695767987.889160 864030095.691202 

这对于to_csv同样的工作:

df.to_csv('df.csv', float_format='{:f}'.format, encoding='utf-8') 
+1

似乎不工作于大熊猫0.17.1:TypeError:不支持的操作数类型为%:'builtin_function_or_method'和'float' – sammosummo

+0

@ user1637894仍然适用于我的0.17.1:s。在python 2.7和3.4上测试了几个不同的numpy版本。 –

+0

@ user1637894我建议在熊猫的github上发布您的问题! –

0

如果你想使用的值作为一个表格式化字符串,也就是说,作为csvfile csv.writier的一部分,该数字可以创建列表之前格式化:

with open('results_actout_file','w',newline='') as csvfile: 
    resultwriter = csv.writer(csvfile, delimiter=',') 
    resultwriter.writerow(header_row_list) 

    resultwriter.writerow(df['label'].apply(lambda x: '%.17f' % x).values.tolist())