【发布时间】:2020-01-19 15:34:12
【问题描述】:
我有一个 csv 文件,我想使用 Numpy 打开它以进行分配(我必须使用 Numpy 来进行分配),但我得到的数组只是充满了 NaN。我的 csv 文件有 2 列和 28 行(如果不包括标题,则为 27 行)字符串:第 1 列中的细菌物种名称和第 2 列中的 URL。
import numpy as np
file = open('human_skin_microbiome.csv', 'r')
file_array = np.genfromtxt(file, delimiter=',')
print(file_array)
[[nan nan]
[nan nan]
...
[nan nan]
[nan nan]]
请指教!
【问题讨论】:
-
如果添加
skip_header=1会怎样?还是loose=False? -
即使指定 dtype=None 和 skip_header=1,我也会收到错误:VisibleDeprecationWarning:不推荐使用未指定编码参数的情况下读取 unicode 字符串。设置编码,系统默认使用None。
-
当我添加松散=假时,我收到错误:ValueError: could not convert string to float: 'Acinetobacter ursingii'
-
然后添加
encoding=None参数。genfromtxt默认将数据读取为浮点数,如果字符串不是有效数字,则放入nan。如果文件有非数字列,则需要更改dtype。我知道genfromtxt的文档冗长且令人困惑,但有时您只需阅读它们即可。 -
要调试,您可以打印
file_array.dtype以查看自动定义的 dtypes。我已经使用dtype=None, names=True, encoding=None成功读取了带有字符串的 CSV。也许您的某些数据混淆了编码?