我正在尝试写一个列表作为标题,两个np.arrays写出.csv,所以我可以再次读回来。我是sci-kit-learn和numpy的新手。我读了原始的.csv,但是大大修改了数据和维度。现在我打算把它写出去,但我不知所措。
对于列表类型的行标题,我有feature_names = ['age','sex','height','weight','shape']。
我有一个np.array X = [31.19418104 0. 1. 0. 0.] 一个984 x 5浮点数组
我有一个np.array y = 1.0,它是一个984 x 1的float数组
我将feature_names,X和y写入.csv文件以便稍后保存并再次读入。
我希望CSV格式为: feature_names X [0] y [0] ..... X [984] y [984]
第0行“年龄”,“性别”,“身高”,“体重”,“形状”
第1行“31.19418104”,“0。”,“1。”,“0。”,“0。”,“1.0”
第n-1行.......
我需要为我正在做的工作保留这种格式。
我希望做类似的事情:
import csv
f = open("output.csv)
r = writer()
len = colLen(X)
r.writerrow(feature_name)
for x to len-1
r.writerrow(X,y)
f.close()
我试图找到文档(2天)后放弃了,非常感谢您的帮助!
答案 0 :(得分:1)
您可以使用hstack
连接数组和savetxt
以保存到csv(包含文档的链接)
演示。使用StringIO是出于演示目的,您可以改为提供文件路径:
设置数据和堆栈:
from StringIO import StringIO
import numpy as np
# for repeatability
np.random.seed(11)
X = np.random.rand(984,5)
y = np.random.rand(984,1)
Xy = np.hstack([X,y])
现在我们有了
>>> X[:4]
array([[ 0.18026969, 0.01947524, 0.46321853, 0.72493393, 0.4202036 ],
[ 0.4854271 , 0.01278081, 0.48737161, 0.94180665, 0.85079509],
[ 0.72996447, 0.10873607, 0.89390417, 0.85715425, 0.16508662],
[ 0.63233401, 0.02048361, 0.11673727, 0.31636731, 0.15791231]])
>>> y[:4]
array([[ 0.2880356 ],
[ 0.83924851],
[ 0.92760524],
[ 0.29316801]])
>>> Xy
array([[ 0.18026969, 0.01947524, 0.46321853, 0.72493393, 0.4202036 ,
0.2880356 ],
[ 0.4854271 , 0.01278081, 0.48737161, 0.94180665, 0.85079509,
0.83924851],
[ 0.72996447, 0.10873607, 0.89390417, 0.85715425, 0.16508662,
0.92760524],
...,
[ 0.0589937 , 0.09835012, 0.24966667, 0.33485216, 0.48755067,
0.32618452],
[ 0.67798696, 0.0563275 , 0.83806763, 0.14160098, 0.53686285,
0.49052511],
[ 0.36844028, 0.82034601, 0.82753566, 0.96210629, 0.63720074,
0.12148659]])
保存到缓冲区(或文件):
>>> feature_names = [' age', 'sex', 'height', 'weight', 'shape']
>>> header = ', '.join(feature_names)
>>> buf = StringIO()
>>> np.savetxt(buf, Xy, fmt="%f", delimiter=', ', header=header)
>>> print '\n'.join(buf.getvalue().splitlines()[:4])
# age, sex, height, weight, shape
0.180270, 0.019475, 0.463219, 0.724934, 0.420204, 0.288036
0.485427, 0.012781, 0.487372, 0.941807, 0.850795, 0.839249
0.729964, 0.108736, 0.893904, 0.857154, 0.165087, 0.927605
注意,您可能不需要为您的值添加引号"
,就好像添加了一样,csv reader会将它们视为字符串,而不是浮点数
答案 1 :(得分:0)
import csv
with open('some.csv', 'wb') as f:
out_csv = csv.writer(f)
headers = [' age', 'sex', 'height', 'weight', 'shape']
out_csv.writerow(headers)
myArray = np.array([[1,2,3,4,5],[6,7,8,9,11]])
for row in myArray:
out = row.tolist() + [1] #if they're all just ones.
out_csv.writerow(out)
输出:
年龄,性别,身高,体重,外形
1,2,3,4,5,1
6,7,8,9,11,1