函数创建返回工作信息的数组

时间:2019-04-03 14:54:28

标签: python arrays numpy

我正在寻找创建一个将CSV文件作为输入的函数。该文件包含4列和30行数据。在我的函数中,我想为文件中存在的每一行数据创建一个2D数组,其中x坐标是存储在第一列中的信息,y坐标是存储在第二列中的信息。

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个2D数组,这使我相信return语句可能是错误的。任何帮助或建议,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

是否有任何理由不使用numpy库方式来处理此问题?不知道我是否想念什么。

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

来源:https://docs.scipy.org/doc/numpy/reference/generated/numpy.genfromtxt.html

答案 1 :(得分:0)

@OsmosisJonesLoL的方法很棒,但是还有另一种选择。您可以使用csv module打开.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)

或者您可以将每个二维数组追加到空列表中。

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

关于代码段,您已发布。我不完全了解theDatanumbers来自何处?我猜应该是相同的变量。该代码实际上应该返回最后一行,而不是第一行。 要返回每个二维数组,您需要先将每行追加到空数组,然后再返回它。而且,您实际上实际上不需要在这里使用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))