genfromtxt returning NaN rows



我正在尝试使用 numpy 读取 csv 文件,我有以下代码

from numpy import genfromtxt
data = genfromtxt(open('errerr.csv', "r"), names=True, delimiter=',')

下面出来了

  (nan, nan, nan, nan, nan, nan, nan),
       (nan, nan, nan, nan, nan, nan, nan),
       (nan, nan, nan, nan, nan, nan, nan)], 
      dtype=[('name', '<f8'), ('severity', '<f8'), ('Message', '<f8'), ('AppDomainName', '<f8'), ('ProcessName', '<f8'), ('clientid', '<f8'), ('type', '<f8')])

dtype 看起来不错

为了证明我不会发疯,我尝试了这段代码

import csv
f = open('errors.csv', 'rt')
reader = csv.reader(f)
data = [] 
for r in reader: 
    data.append(r)
f.close()

这很好用,但我试图弄清楚与 genfromtxt 的交易是什么

这是来自 CSV 的样本

name,severity,Message,AppDomainName,ProcessName,clientid,type
 Strings strings,Error,")  Thread Name:  Extended Properties:",SunDSrvc.exe,C:Program Files\SunDSrvc.exe,5DAA9377 ,Client
 Strings strings,Error,")  Thread Name:  Extended Properties:",SunDSrvc.exe,C:Program Files\SunDSrvc.exe,5DAA9377 ,Client
 Strings strings,Error,")  Thread Name:  Extended Properties:",SunDSrvc.exe,C:Program Files\SunDSrvc.exe,5DAA9377 ,Client

你的dtype不好。 它为每个字段指定 '<f8' ,一个浮点数。 你想要字符串。 尝试dtype=None

 np.genfromtxt(txt,delimiter=',',names=True,dtype=None)

它产生:

array([ ('Strings strings', 'Error', '")  Thread Name:  Extended Properties:"', 'SunDSrvc.exe', 'C:\Program Files\SunDSrvc.exe', '5DAA9377 ', 'Client'),
       ('Strings strings', 'Error', '")  Thread Name:  Extended Properties:"', 'SunDSrvc.exe', 'C:\Program Files\SunDSrvc.exe', '5DAA9377 ', 'Client'),
       ('Strings strings', 'Error', '")  Thread Name:  Extended Properties:"', 'SunDSrvc.exe', 'C:\Program Files\SunDSrvc.exe', '5DAA9377 ', 'Client')], 
      dtype=[('name', 'S15'), ('severity', 'S5'), ('Message', 'S39'), ('AppDomainName', 'S12'), ('ProcessName', 'S29'), ('clientid', 'S9'), ('type', 'S6')])

(我已经删除了引号内有关分隔符的无关内容)

您还应该添加encoding=None以避免出现已弃用的警告:

可见弃用警告:读取 unicode 字符串而不指定 不推荐使用编码参数。设置编码,使用 None 系统默认值。

你的行应该是这样的:

np.genfromtxt(txt, delimiter=',', names=True, dtype=None, encoding=None)

我从Excel读取以csv格式保存的数据时遇到了完全相同的问题。它让我发疯了几个小时,直到我找到这个。在Excel中,保存菜单上的第一个csv格式是BOM格式的UTF-8 - 这会在第一个单元格中产生nan错误。如果您使用菜单上的其他 csv 格式保存文件,例如:CSV(逗号分隔),CSV(Macintosh),CSV(MS-DOS),GENFROMTXT 函数在没有 nan 错误的情况下工作。

最新更新