genfromtxt 返回 NaN 行

新手上路,请多包涵

我正在尝试用 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

原文由 Marcom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 618
2 个回答

您的 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')])

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

原文由 hpaulj 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

VisibleDeprecationWarning:不推荐在不指定编码参数的情况下读取 unicode 字符串。设置编码,系统默认使用None。

你的行应该是这样的:

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

原文由 ArgiesDario 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题