Функция Создание массивов, возвращающих рабочую информацию - PullRequest
0 голосов
/ 03 апреля 2019

Я ищу, чтобы создать функцию, которая принимает в качестве входного файла CSV. Этот файл содержит 4 столбца и 30 строк данных. В моей функции я хочу создать двумерный массив для каждой строки данных, которая существует в файле, где координата х - это информация, хранящаяся в первом столбце, а координата у - информация, хранящаяся во втором столбце.

document = open("d.csv")
headers = document.readline()

def generateArrays(document):
    for theData in document:
        editDocument = theData.strip().split(",")
        array = np.array((editDocument[0], editDocument[1]))
    return array 

print(generateArrays(document))

Когда я вызываю функцию и распечатываю ее, я ожидал увидеть распечатку 30 различных 2D-массивов. Вместо этого, однако, я вижу только это: [1, 29], которая является информацией, хранящейся в первой строке файла CSV. Я протестировал цикл for вне функции, и он возвратил 30 двумерных массивов, что наводит меня на мысль, что, возможно, выражение return неверно. Любая помощь или предложения с благодарностью.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

@ Способ OsmosisJonesLoL великолепен, но есть и другой вариант. Вы можете использовать модуль csv , чтобы открыть файл .csv, а затем выполнить итерацию каждой строки и нарезать первые два столбца, а затем распечатать его.

import csv
DOCUMENT = 'file.csv'

def generate_arrays(document):
    file = csv.reader(open(document), delimiter=',')
    for row in file:
        print(row[:2])

generate_arrays(DOCUMENT)

Или вы можете просто добавить каждый 2-й массив в пустой список.

import csv
DOCUMENT = 'file.csv'

def generate_arrays(document):
    arrays = []
    file = csv.reader(open(document), delimiter=',')
    for row in file:
        arrays.append(row[:2])
    return arrays

print(generate_arrays(DOCUMENT))

Что касается кода, вы размещены. Я не совсем понял, откуда theData и numbers откуда? Я думаю, это должна быть та же самая переменная. Код должен фактически возвращать последнюю строку, а не первую. Чтобы вернуть каждый двумерный массив, сначала нужно добавить каждую строку в пустой массив, а затем вернуть его. И вам на самом деле не нужно использовать метод numpy array здесь.

Также будьте осторожны с методом open, так как вам нужно явно закрыть файл после того, как вы покончили с ним. Так что удобнее использовать оператор with. Он гарантирует, что файл будет закрыт после того, как мы закончили читать его содержимое. Обратите внимание, что line_slices[:2] равно [line_slices[0], line_slices[1]]

DOCUMENT = 'file.csv'

def generate_arrays(document):
    array = []
    with open(document) as file:
        for line in file:
            line_slices = line.split(",")
            array.append(line_slices[:2])
        return array

print(generate_arrays(DOCUMENT))
0 голосов
/ 03 апреля 2019

Есть какая-то причина, чтобы не использовать этот простой способ обработки библиотеки?Не уверен, что я что-то упустил.

np.genfromtxt('sample.csv', skip_header=1, usecols=(0,1), delimiter=',')

Источник: https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...