我正在寻找创建一个将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语句可能是错误的。任何帮助或建议,我们将不胜感激。
答案 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))
关于代码段,您已发布。我不完全了解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))