【问题标题】:How do I write a list and two np. arrays to a .csv file using sci-kit-learn and numpy我如何写一个列表和两个 np.使用 sci-kit-learn 和 numpy 将数组转换为 .csv 文件
【发布时间】:2014-01-02 11:08:02
【问题描述】:

我正在尝试将一个列表作为标题写出,并将两个 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 的浮点数组

我将 feature_names、X 和 y 写入 .csv 文件以保存并稍后再次读取。

我希望 CSV 格式为: 特征名称 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 天)后我放弃了,希望您能提供帮助!

【问题讨论】:

  • 你会用python再读一遍吗?如果是这样,您可以将数组保存为二进制文件。 np.保存
  • 我将使用 python,但它们必须是人类可读的,并且可以用于其他编程语言和工具,所以是的......那是我找不到任何东西的地方。

标签: python numpy scikit-learn


【解决方案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 阅读器会将它们视为字符串,而不是浮点数

【讨论】:

    【解决方案2】:
    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

    【讨论】:

    • 这看起来真的很棒,但我得到了这个错误:Xy = np.hstack([X_train,y_train]) File "/usr/lib/python2.7/dist-packages/numpy/core/ shape_base.py",第 275 行,在 hstack 中 return _nx.concatenate(arrs, 1) ValueError: 所有输入数组必须具有相同的维数
    • 评论了错误的答案。但无论如何,你能显示 X_train.shape 和 y_train.shape 吗?
    • 我分别检查了 X 和 y 的维度并得到:
    • (984, 5) (984,)
    • y_train.resize(y_train.shape[0],1) 在hstack函数之前试试这个
    猜你喜欢
    • 1970-01-01
    • 2018-08-28
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2020-02-22
    • 2011-05-19
    相关资源
    最近更新 更多