使用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
查询维度。
如何修复此代码以便将内容读入数组?
答案 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时,请务必检查是否有好的分隔符和行结束符。