我如何写一个列表和两个np。使用sci-kit-learn和numpy将数组转换为.csv文件

时间:2013-12-14 19:51:27

标签: python numpy scikit-learn

我正在尝试写一个列表作为标题,两个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天)后放弃了,非常感谢您的帮助!

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