试图替换“。”我使用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标量
答案 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
!