【问题标题】:numpy reading a csv file to an numpy arraynumpy 将 csv 文件读取到 numpy 数组
【发布时间】:2018-09-10 06:53:42
【问题描述】:

我是 python 新手,使用 numpy 将 csv 读取到数组中。所以我使用了两种方法:

方法 1

train = np.asarray(np.genfromtxt(open("/Users/mac/train.csv","rb"),delimiter=","))

方法 2

with open('/Users/mac/train.csv') as csvfile:
        rows = csv.reader(csvfile)
        for row in rows:
            newrow = np.array(row).astype(np.int)
            train.append(newrow)

我不确定这两种方法有什么区别?推荐使用什么?

我不关心哪个更快,因为我的数据量很小,而是更关心结果数据类型的差异。

【问题讨论】:

  • 为什么不pandas?很简单:pd.read_csv('path/to/file')
  • 除了@Lucas 很好的建议之外,用例还取决于您的数据是包含不同数据类型的混合,还是更加异构。
  • 文件中只有一个数据类型整数
  • What is recommended to use? 这是一个广泛的问题。您具体关心什么?如果不是性能,是可读性还是其他?

标签: python-3.x numpy


【解决方案1】:

你也可以用pandas,更好用也更简单。

import pandas as pd
import numpy as np

dataset = pd.read_csv('file.csv')
# get all headers in csv
values = list(dataset.columns.values)

# get the labels, assuming last row is labels in csv
y = dataset[values[-1:]]
y = np.array(y, dtype='float32')
X = dataset[values[0:-1]]
X = np.array(X, dtype='float32')

【讨论】:

    【解决方案2】:

    那么结果有什么不同呢?

    genfromtxt 是 numpy csv 阅读器。它返回一个数组。不需要额外的asarray

    第二个表达式不完整,看起来会生成一个数组列表,文件的每一行都有一个。它使用通用的 python csv 阅读器,除了读取一行并将其拆分为字符串之外,它并没有做太多的事情。

    【讨论】:

    • 但是当我返回时它是一个列表而不是一个数组
    • 这就是我想要指出的。这两种方法返回不同的东西。
    • 所以要将列表转换为数组,我使用了 np.asarray
    猜你喜欢
    • 2019-08-24
    • 2018-01-03
    • 2020-06-07
    • 1970-01-01
    • 2011-08-30
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多