【问题标题】:genfromtxt returning NaN rowsgenfromtxt 返回 NaN 行
【发布时间】:2015-01-19 21:28:20
【问题描述】:

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

【问题讨论】:

  • 请注意,如果您正在处理这样的文本数据,pandas 可能是比裸 numpy 更好的选择; pd.read_csv("yourfile.csv") 可以开箱即用。
  • 我会用 numpy 做一些其他的事情,所以如果可能的话,我宁愿坚持一个框架

标签: python csv numpy


【解决方案1】:

您的dtype 不正常。它为每个字段指定'&lt;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')])

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

【讨论】:

  • 那个 '")...' 把我搞砸了。我将删除关于额外分隔符的内容。
  • 成功了。我在某个时候设置了该设置,但在清理导致我误入歧途的数据时遇到了其他问题。谢谢:)
【解决方案2】:

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

VisibleDeprecationWarning:读取 unicode 字符串而不指定 不推荐使用 encoding 参数。设置编码,使用 None 为 系统默认值。

你的行应该是这样的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2011-04-22
    • 2016-05-20
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多