从CSV文件创建NumPy数组

时间:2017-10-03 12:51:45

标签: python numpy

使用Python 3.3,我试图用NumPy文件中的内容填充.CSV数组。 .CSV文件包含以下内容:

CellID  X   Y   Z   
1230    1   1   0
1231    2   1   0 
1232    1   1   1

第一行包含标题,因此必须跳过它。

import csv
import numpy as np

csv_fn = "input.csv"

with open(csv_fn, "rb") as infile:
    reader = csv.reader(infile)
    next(reader, None)         # Skips the header? 
    x = list(reader) 
    result = np.array(x).astype("int")  # Converts to a matrix of int? 

变量result似乎不包含预期值。我尝试使用result.shape查询维度。

如何修复此代码以便将内容读入数组?

4 个答案:

答案 0 :(得分:2)

使用np.loadtext

from io import StringIO
import numpy as np

file_content = """CellID  X   Y   Z
1230    1   1   0
1231    2   1   0
1232    1   1   1"""

# Replace StringIO with your file object
with StringIO(file_content) as f:
    data = np.loadtxt(f, skiprows=1, dtype=int)

print(data)

输出:

[[1230    1    1    0]
 [1231    2    1    0]
 [1232    1    1    1]]

答案 1 :(得分:1)

您可以使用pandas将csv文件作为数据框读入,然后只使用它的值

import pandas as pd
import numpy as np

csv_fn = "input.csv"

file = pd.read_csv(csv_fn)
result = file.values

答案 2 :(得分:0)

这究竟是什么问题? 你试过numpy.genfromtxt吗?这是一个很好的加载这样的文件的功能。

答案 3 :(得分:0)

调用next()跳过第一行是好的,但使用itertools.dropwhile()可能会更清楚你的意图。

现在,如果你没有显示出你没有预料到的结果,我无法猜测。 我可以看到的问题是,默认csv.reader()方言中的分隔符是' excel'是逗号,而在你的文件中,分隔符似乎是分隔符。这样,读者将每个文件的行解释为具有一个元素。 您的列表x将如下所示:

[['1230    1   1   0'],
 ['1231    2   1   0'], 
 ['1232    1   1   1']]

显然,您在将这些字符串转换为int时会遇到一些问题。

使用csv时,请务必检查是否有好的分隔符和行结束符。