在numpy genfromtxt中,missing_values、filling_values、excludelist、deletechars和replace_space无法正常工作

mspsb9vt  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(106)

这是我的测试.csv文件,其中“A 1”和“A+2”是头文件:

A 1,A+2
test&     ,1
skip,
#,
N/A,NA

这是我的代码:

import numpy as np
test = np.genfromtxt("test.csv", 
                          delimiter = ',',
                          dtype = str,
                          comments = '#',
                          converters = None,
                          missing_values='NA', 
                          filling_values=np.nan,
                          excludelist = ['skip'],
                          deletechars = " !#$%&'()*+,-./:;<=>?@[\\]^{|}~",
                          replace_space = '_',
                          autostrip = True
                         )
print(test)

这是我的输出:

[['A 1' 'A+2']
 ['test&' '1']
 ['skip' '']
 ['N/A' 'NA']]

为什么不是这样的输出:

[['A_1' 'A2']
 ['test' '1']
 ['NA' nan]]

missing_values、filling_values、excludelist、deletechars和replace_space的正确用法是什么?

jmp7cifd

jmp7cifd1#

首先是一个粗略的阅读:

In [249]: txt="""A 1,A+2
     ...: test&     ,1
     ...: skip,
     ...: #,
     ...: N/A,NA"""

In [250]: np.genfromtxt(txt.splitlines(), delimiter=',', dtype=str)
Out[250]: 
array([['A 1', 'A+2'],
       ['test&     ', '1'],
       ['skip', ''],
       ['N/A', 'NA']], dtype='<U10')

使用usemask和缺失值列表(似乎每列需要一个):

In [251]: np.genfromtxt(txt.splitlines(), delimiter=',', autostrip=False, dtype=str, missing_values=['N/A','NA'],usemask=True)
Out[251]: 
masked_array(
  data=[['A 1', 'A+2'],
        ['test&     ', '1'],
        ['skip', --],
        [--, --]],
  mask=[[False, False],
        [False, False],
        [False,  True],
        [ True,  True]],
  fill_value='N/A',
  dtype='<U10')

In [253]: _251.filled()
Out[253]: 
array([['A 1', 'A+2'],
       ['test&     ', '1'],
       ['skip', 'N/A'],
       ['N/A', 'N/A']], dtype='<U10')

我不知道filling_values是怎么回事。
genfromtxt的源代码大部分是python,但相当复杂,包括处理缺失/填充值的部分。
你可能会有更多的成功与pandas阅读器;它似乎更优雅地处理缺失值。
在最近的numpy版本中,np.loadtxt已经被重写以更快。但它不处理缺失值。

相关问题