替换为“。”使用numpy将十进制数字写入文件时,请使用“,”

时间:2019-05-12 10:19:58

标签: python numpy

试图替换“。”我使用numpy编写的文件中带有“,”的字符,但是我只能成功地减少整数。我该怎么办?

np.savetxt("C:\\Users\\jcst\\Desktop\\Private\\Python data\\train22.csv", ('%15.1f' % predicted_factor).replace(".", ","), delimiter=',')
  

回溯(最近通话最近):文件   “ C:/Users/jcst/PycharmProjects/Frafaldsanalyse/DefiningCatAndNumFeatures_4.py”,   165行,在       np.savetxt(“ C:\ Users \ jcst \ Desktop \ Private \ Python data \ train22.csv”,('%15.1f'%prediction_factor).replace(“。”,“,”),   delimiter =',')TypeError:只能将size-1数组转换为   Python标量

1 个答案:

答案 0 :(得分:0)

使用savetxt进行普通浮点数写入:

In [44]: arr = np.arange(0,6,.34).reshape(6,3) 
In [51]: np.savetxt('test.txt',arr, fmt='%10.3f', delimiter=',')                
In [52]: cat test.txt                                                           
     0.000,     0.340,     0.680
     1.020,     1.360,     1.700
     2.040,     2.380,     2.720
     3.060,     3.400,     3.740
     4.080,     4.420,     4.760
     5.100,     5.440,     5.780

创建后编辑此文件,首先替换定界符,然后替换小数点是一个选项。

语言环境

使用locale模块可以将小数点更改为逗号(我假设这就是您要使用replace进行的操作)。但是我找不到直接使用%使用的savetxt格式样式的方法。

locale.setlocale(LC_NUMERIC): how to make it work on Windows

但是可以使用'n'format savetxt . So rewriting format`来使用更新的to use样式的本地化:

In [98]: fmt = '{:10.3n}'                                                       
In [99]: fmts = ';'.join([fmt]*3)+'\n'                                          
In [100]: fmts                                                                  
Out[100]: '{:10.3n};{:10.3n};{:10.3n}\n'
In [101]: with open('test1.txt','w') as f: 
     ...:     for row in arr: 
     ...:         f.write(fmts.format(*row)) 
     ...:                                                                       
In [102]: cat test1.txt                                                         
         0;      0,34;      0,68
      1,02;      1,36;       1,7
      2,04;      2,38;      2,72
      3,06;       3,4;      3,74
      4,08;      4,42;      4,76
       5,1;      5,44;      5,78

在我之前完成的会话中

import locale    
locale.setlocale(locale.LC_NUMERIC, 'en_DK.utf8') 

我对locale不熟悉,但这似乎足够了。我的系统上没有安装任何特殊的locale软件包。

阅读

请注意,np.genfromtxt将需要一个转换器(将逗号改回句点)。

In [145]: foo = lambda astr: float(astr.replace(b',',b'.'))                     
In [146]: np.genfromtxt('test1.txt',delimiter=';',converters={i:foo for i in ran
     ...: ge(3)})                                                               
Out[146]: 
array([[0.  , 0.34, 0.68],
       [1.02, 1.36, 1.7 ],
       [2.04, 2.38, 2.72],
       [3.06, 3.4 , 3.74],
       [4.08, 4.42, 4.76],
       [5.1 , 5.44, 5.78]])

熊猫

pandas虽然有一个decimal参数:

In [133]: df = pd.read_csv('test1.txt',sep=';',decimal=',',header=None)         
In [134]: df                                                                    
Out[134]: 
      0     1     2
0  0.00  0.34  0.68
1  1.02  1.36  1.70
2  2.04  2.38  2.72
3  3.06  3.40  3.74
4  4.08  4.42  4.76
5  5.10  5.44  5.78

熊猫csv的编写者还使用了decimal参数。

也许我应该马上看看pandas