【问题标题】:Read csv file into n dimensional array in python将csv文件读入python中的n维数组
【发布时间】:2017-03-10 01:51:59
【问题描述】:

我有一个 CSV 文件中运行的实验设计数据集。它基本上是一个表格形式的 n 维数组。

CSV 文件是多变量计算的输出。目前,数据集是 7 个维度,但可能更多。

我正在尝试将这些数据读入 python 中的 n 维数组,以便在 n 维空间中进行插值。

以下数据相同:

var1,var2,var3,var4,var5,output1,output2,output3
1,1,1,1,1,777,888,999
1,1,1,1,2,777,888,999
1,1,1,1,3,777,888,999
1,1,1,2,1,777,888,999
1,1,1,2,2,777,888,999
1,1,1,2,3,777,888,999
1,1,2,1,1,777,888,999
1,1,2,1,2,777,888,999
1,1,2,1,3,777,888,999
1,1,2,2,1,777,888,999
1,1,2,2,2,777,888,999
1,1,2,2,3,777,888,999
1,2,1,1,1,777,888,999
1,2,1,1,2,777,888,999
1,2,1,1,3,777,888,999
1,2,1,2,1,777,888,999
1,2,1,2,2,777,888,999
1,2,1,2,3,777,888,999
1,2,2,1,1,777,888,999
1,2,2,1,2,777,888,999
1,2,2,1,3,777,888,999
1,2,2,2,1,777,888,999
1,2,2,2,2,777,888,999
1,2,2,2,3,777,888,999
2,1,1,1,1,777,888,999
2,1,1,1,2,777,888,999
2,1,1,1,3,777,888,999
2,1,1,2,1,777,888,999
2,1,1,2,2,777,888,999
2,1,1,2,3,777,888,999
2,1,2,1,1,777,888,999
2,1,2,1,2,777,888,999
2,1,2,1,3,777,888,999
2,1,2,2,1,777,888,999
2,1,2,2,2,777,888,999
2,1,2,2,3,777,888,999
2,2,1,1,1,777,888,999
2,2,1,1,2,777,888,999
2,2,1,1,3,777,888,999
2,2,1,2,1,777,888,999
2,2,1,2,2,777,888,999
2,2,1,2,3,777,888,999
2,2,2,1,1,777,888,999
2,2,2,1,2,777,888,999
2,2,2,1,3,777,888,999
2,2,2,2,1,777,888,999
2,2,2,2,2,777,888,999
2,2,2,2,3,777,888,999

【问题讨论】:

  • 你能举一个你的数据的小例子吗?是x1,x2,x3,x4,x5,x6,x7的csv?
  • 听起来像是 Pandas 的工作,尽管没有数据很难判断。您还应该阅读how to ask,因为 SO 旨在帮助程序员解决特定的技术问题,而不是按顺序编写代码。
  • 至少在 numpy 中使用的 7 维数组不能表示为 2d csv 表。举一个 csv 的例子,并更清楚地解释你需要用它做什么。我的猜测是您有一个包含许多“行”和 7 个“列”的二维数组,而不是 7 维数组。
  • 读取格式良好的 csv 文件很容易 - 只需读取一行,在分隔符处拆分,将结果列表的所有元素转换为数字并收集到列表列表中。
  • 作为新成员,您可能想阅读How to Ask和minimal reproducible example。

标签: python arrays numpy


【解决方案1】:

看看csv.reader()。

那里有一个例子;它会让你从 csv 文件中得到你想要的值。您可能需要修改它以将您的值转换为整数。类似于以下内容:

import csv
data = []
with open('data.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        data.append([int(val) for val in row])

【讨论】:

    【解决方案2】:

    根据您在 pandas 和 numpy 库中读取数据后想要对数据执行的操作可能对您很有效。

    import numpy as np
    import pandas as pd
    
    df = pd.read_csv('data.csv')
    data = df.values
    

    数据变量将包含一个 n 维 numpy 数组。 numpy 还允许向量化操作,这可能为您需要在数组上执行的任何操作提供很大的速度优势。

    【讨论】:

      【解决方案3】:

      从您帖子的编辑器视图中复制粘贴,我可以使用以下方法加载数据:

      In [10]: data=np.genfromtxt('stack42708781.txt',delimiter=',',dtype=int,skip_header=1)
      In [11]: data[:5,:]
      Out[11]: 
      array([[  1,   1,   1,   1,   1, 777, 888, 999],
             [  1,   1,   1,   1,   2, 777, 888, 999],
             [  1,   1,   1,   1,   3, 777, 888, 999],
             [  1,   1,   1,   2,   1, 777, 888, 999],
             [  1,   1,   1,   2,   2, 777, 888, 999]])
      In [12]: data.shape
      Out[12]: (48, 8)
      

      或

      In [19]: data=np.genfromtxt('stack42708781.txt',delimiter=',',names=True,dtype=None)
      In [20]: data.shape
      Out[20]: (48,)
      In [21]: data[:5]
      Out[21]: 
      array([(1, 1, 1, 1, 1, 777, 888, 999), (1, 1, 1, 1, 2, 777, 888, 999),
             (1, 1, 1, 1, 3, 777, 888, 999), (1, 1, 1, 2, 1, 777, 888, 999),
             (1, 1, 1, 2, 2, 777, 888, 999)], 
            dtype=[('var1', '<i4'), ('var2', '<i4'), ('var3', '<i4'), ('var4', '<i4'), ('var5', '<i4'), ('output1', '<i4'), ('output2', '<i4'), ('output3', '<i4')])
      

      【讨论】:

        猜你喜欢
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 2011-08-12
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多