Numpy чтение файла csv в массив numpy

Я новичок в 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)

Я не уверен, в чем разница между этими двумя подходами? Что рекомендуется использовать?

Меня не волнует, что быстрее, так как размер моих данных невелик, а меня больше беспокоят различия в результирующем типе данных.

Почему не панды? Все просто: pd.read_csv('path/to/file')

Lucas 10.09.2018 08:55

Помимо отличного предложения @Lucas, вариант использования также зависит от того, содержат ли ваши данные смесь разных типов данных или они более разнородны.

dennlinger 10.09.2018 08:56

В файле есть только одно целое число типа данных

Ricky 10.09.2018 08:56

Возможный дубликат Самый быстрый способ читать ввод в Python

Daniel F 10.09.2018 09:30
What is recommended to use? Это широкий вопрос. Какие конкретно вас беспокоят? Если не производительность, то удобочитаемость или что-то еще?
jpp 10.09.2018 10:58
0
5
3 506
2

Ответы 2

Так в чем же разница в результате?

genfromtxt - это очень много читателей csv. Он возвращает массив. Нет необходимости в дополнительном asarray.

Второе выражение является неполным, похоже, будет создан список массивов, по одному для каждой строки файла. Он использует общий читатель csv python, который не делает ничего, кроме чтения строки и разделения ее на строки.

Но когда я возвращаюсь, это список, а не массив

Ricky 10.09.2018 14:06

Это то, что я пытался указать. Два метода возвращают разные вещи.

hpaulj 10.09.2018 17:07

Итак, чтобы преобразовать список в массив, я использовал np.asarray

Ricky 11.09.2018 06:50

Вы также можете использовать панды, это лучше и проще в использовании.

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')

Другие вопросы по теме