Numpy函数学习--genfromtxt函数

genfromtxt函数

今天学习时遇到了genfromtxt函数

world_alcohol = numpy.genfromtxt("world_alcohol.txt",delimiter=",",dtype = str)

What is genfromtxt?

  • genfromtxt函数创建数组表格数据
  • genfromtxt主要执行两个循环运算。第一个循环将文件的每一行转换成字符串序列。第二个循环将每个字符串序列转换为相应的数据类型。
  • genfromtxt能够考虑缺失的数据,但其他更快和更简单的函数像loadtxt不能考虑缺失值。
  • 使用前需导入相应模块

    Python 3 import numpy

  • 定义输入

    genfromtxt唯一的强制参数是数据的来源。它可以是一个对应于一个本地或远程文件的名字字符串,或一个有read方法的file-like对象(如一个实际的文件或StringIO。StringIO对象)。如果参数是一个远程文件的URL,后者在当前目录中自动下载。输入文件可以是一个文本文件或存档,目前,该函数识别gzip和bz2(bzip2)。归档文件的类型是检查文件的扩展:如果文件名以“.gz”结尾”,gzip存档;如果它结尾是“bz2”,bzip2存档。

  • 将行分割成列
    • genfromtxt分割每个非空行成一个字符串序列。空的行或注释行跳过。
    • 分割符并不局限于单个字符,任何字符串就可以了。
    • 分割一个固定宽度的文件,列的宽度被定义为一个给定的字符数。在这种情况下,我们需要将分隔符设置成一个整数(如果所有的列有相同的大小)或一个整数序列(如果列可以有不同的大小)。
      data = "123456789\n  4  7 9\n  4567 9"
      np.genfromtxt(StringIO(data), delimiter=(4, 3, 2))
      array([[ 1234.,  567.,    89.],      [    4.,    7.,    9.],      [    4.,  567.,    9.]])

genfromtxt 参数详解

  • autostrip参数

    当把一行分割成一个字符串序列,序列中的每一项前后的多余空格还存在,可以将autostrip参数设置为true,去掉空格。

  • comments参数

    comments参数是一个字符串,标志着一个注释的开始符号。默认是"#",在转换过程中注释标记可能发生在任何地方。任何字符出现在在注释标记之后会被忽略。

    注意:这种行为有一个例外:如果可选的参数names= True,第一行检查到注释行会被认为是名称。

  • skip_header和skip_footer参数

    一个文件的页眉会阻碍文件的处理。在这种情况下,我们需要使用skip_header可选参数。这个参数的值必须是一个整数,跳过文件开头的对应的行数,然后再执行任何其他操作。同样的,我们通过使用skip_footer属性和n的值可以跳过文件的最后n行。默认值都为0.

  • usercols参数

    在某些情况下,我们只对数据中的某些列感兴趣。我们可以使用usecols选择感兴趣的列。这个参数接受一个整数或一个整数序列作为索引。记住,按照惯例,第一列的索引0,-1对应最后一列。如果列有名称,我们也可以将usecols参数设置为他们的名称,或者包含列名称一个字符串序列或逗号分隔的字符串。

  • dtype参数

    我们从文件读取的字符串序列要转换为其他类型数据时需设置dtype参数。默认是float类型。

    1.单个类型,如dtype =float。

    2.一个序列类型,例如dtype=(int, float, float).

    3.一个逗号分隔的字符串,例如dtype="i4,f8,|S3".

    4.一个字典包含两个键‘names’和‘formats’

    5.一个元组序列,例如dtype = [(‘A‘,int),(‘B‘,float)]

    6.一个存在的numpy.dtype对象

    7.一个特殊的值None,在这种情况下,每个列的类型有自身数据决定。将参数设置成None效率较低。因为它会从布尔值开始检验,然后是整型,浮点型,复数最后是字符串,直到满足条件为止。

  • names参数

    可以将names参数设置为true并跳过第一行,程序将把第一行作为列名称,即使第一行被注释掉了也会被读取。或可以使用dtype设置名称,也可以重写names,默认的names是none,当names=none时,将有numpy产生一些标准默认的值"f%i",我们可以通过defaultfmt改变默认格式。

    data = StringIO("1 2 3\n 4 5 6")
    ndtype=[(‘a‘,int), (‘b‘, float), (‘c‘, int)]
    names = ["A", "B", "C"]
    np.genfromtxt(data, names=names, dtype=ndtype)array([(1, 2.0, 3), (4, 5.0, 6)],
      dtype=[(‘A‘, ‘<i8‘), (‘B‘, ‘<f8‘), (‘C‘, ‘<i8‘)])

    注意:我们需要记住,只有一些名字没有定义时才会使用defaultfmt

  • 验证names

    Numpy数组和一个结构化dtype也可以视为recarray,一个字段可以当成一个属性访问。出于这个原因,我们可能需要确保字段名称不包含任何空格或无效的字符,或者不符合标准属性的名称(如size或shape)。genfromtxt接受三个可选参数,提供了一个更好的控制上的名字:

    • deletechars:一个name中所有包含的需要删除的连接符。默认情况下无效字符[email protected]#$%^&*()——+~=|]}({;:/?>,<。
    • excludelist:给出一系列要删除的name,如return,file,print……如果其中一个输入的名字出现在这个列表中,将会给它附加一个下划线(“_”)。
    • case_sensitive:名字是否应该区分大小写(case_sensitive = True),转换为大写(case_sensitive=False or case_sensitive=‘upper‘)或转换为小写(case_sensitive=‘lower‘)
  • converters参数

    当我们希望日期的格式MM/DD/YYYY被转换为一个datetime对象,或一个字符串xx%正确地转换为一个浮点数在0和1之间时,需要使用converters参数定义转换函数。

    这个参数的值通常是一个以列索引或列名称作为键和一个转换函数作为值的字典。这些转换函数可以是实际的函数或lambda函数。在任何情况下,他们应该只接受一个字符串作为输入和输出和只有一个想要得到的元素类型。

  • missing_values

    默认情况下使用空格表示缺失,我们可以使用更复杂的字符表示缺失,例如‘N/A‘或‘???‘。missing_values接受三种类型的值:

    • 一个字符串或逗号分隔的字符串:这个字符串将被用作标记的缺失数据的所有列
    • 一个字符串序列:在这种情况下,按照顺序每一项与对应的列相关联。
    • 一个字典:字典的值是字符串或字符串序列。对应的key可以列索引(整数)或列名(字符串)。此外,key=none定义一个默认值的适用于所有列。
  • filling_values参数

    出现缺失值时,系统默认填充的值:

Expected type Default

bool False

int -1

float np.nan

complex np.nan+0j

string ‘???‘

我们也可以像missing_values参数自定义设置参数的值。filling_values接受三种类型的值:

- 一个单独的值:所有列的默认值

- 一个序列的值:按照顺序每一项对应相应列。

- 一个字典:字典的值是一个单独的对象。对应的key可以列索引(整数)或列名(字符串)。此外,key=none定义一个默认值的适用于所有列。

  • usermask参数

    我们可能还想跟踪缺失数据的发生通过构造一个Boolean mask,数据缺失的地方返回true,否则,则返回False。要做到这一点,我们必须设置可选参数usemask=True(默认是False)。结果将输出一个MaskedArray数组。

除了genfromtxt,numpy.lib.io模块提供了一些来自genfromtxt的便捷功能。这些功能都是以相同的方式工作,但他们有不同的默认值。

  • ndfromtxt

    通常设置usemask=False.输出通常是一个标准的numpy.ndarray.

  • mafromtxt

    通常设置usemask=True. 输出是MaskedArray

  • recfromtxt

    返回标准的numpy.recarray (如果usemask=False)或一个MaskedRecords数组(如果usemaske=True).默认的dtype是dtype=None,意味着每一列的类型将自动确定。

  • recfromcsv

    类似于recfromtxt, 但delimiter=",".

原文地址:https://www.cnblogs.com/Simplelee/p/8975763.html

时间: 2024-10-12 14:33:30

Numpy函数学习--genfromtxt函数的相关文章

深度学习(六)基Tensorflow、Theano的keras常用函数学习

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9769301.html Keras是什么? Keras:基于Theano和TensorFlow的深度学习库 Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow.Theano以及CNTK后端.Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras: 简易和快速的原型设计(keras具有高度模块化,极简,和可

http_build_query函数(学习)

http_build_query函数 http_build_query -- 生成 url-encoded 之后的请求字符串 描述string http_build_query ( array formdata [, string numeric_prefix]) 根据数组产生一个urlencode之后的请求字符串,如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数. <?php $data = array('foo'=>'bar',               'b

opencv2函数学习之erode、dilate:图像腐蚀和膨胀

图像腐蚀和图像膨胀是图像中两种最基本形态学操作. void erode( const Mat& src, Mat& dst, const Mat& element,Point anchor=Point(-1,-1), int iterations=1,int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() ); void dilate( const Ma

02Scala学习-Scala函数定义、流程控制、异常处理入门实战

一 Scala 函数的定义 按照以下格式定义scala函数. def 函数名称(函数输入参数类型){ //函数的实现提 } 1) 第一个简单的例子 HelloWorld object Test2 { def main(args: Array[String]):Unit = { println("HelloWorld") } } a)可以看到输出语句的结尾没有以“;”结束,因为scala的设计者认为,多大一个字符对开发者来说是痛苦的. 他不太赞成在语句的结束写 “;” , 但你也可以写 

C#函数学习及常用的类

C#函数学习及常用的类 函数:能够独立完成某个功能的模块. 好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. 四要素:名称,输入(参数),输出(返回的类型),加工(函数体) 语法: 返回类型 函数名(参数类型 参数名,....) {     函数体 } 函数调用: [数据类型 变量名 = ]函数(参数); 函数调用时:调用的参数和函数定义的参数保持一对待:个数,类型,对应. 形参:形式参数.--函数定义的参数. 实参:实际参数.--函数调用的参数. 实参.形参传值的规律--

Lua学习(4)——函数

在Lua中函数的调用方式和C语言基本相同,如:print("Hello World")和a = add(x, y).唯一的差别是,如果函数只有一个参数,并且该参数的类型为字符串常量或table的构造器,那么圆括号可以省略,如print "Hello World"和f {x = 20, y = 20}.    Lua为面对对象式的调用也提供了一种特殊的语法--冒号操作符.表达式o.foo(o,x)的另一种写法是o:foo(x).冒号操作符使调用o.foo时将o隐含的作

C/C++学习:函数指针

曾经在书上看到函数指针相关的都没怎么重视.可是近期在实际的工作中却派上了用场.所以认真地学习了一遍. 函数指针的申明 申明一个函数指针非常easy,就是将函数申明中的函数名替换为一个指针就可以: C/C++ int test(int para1, double *para2); // 函数申明 int (*pf)(int para1, double *para2); // 函数指针申明 NOTE: 必须在申明中用括号将*pf括起来,由于括号的优先级比*运算符高.因此: C/C++ int (*p

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

函数(学习笔记)

函数(存储函数)也是一种较为方便的存储结构,用户定义函数可以被SQL语句或者PL/SQL直接调,函数和过程最大的区别在于,函数可以有返回值,而过程只能依靠OUT 或者IN OUT返回数据定义函数语法:CREATE [OR REPLACE] FUNCTION 函数([参数,...]])RETURN 返回值类型 [AUTHID [DEFINER | CURRENT_USER]] AS || IS [PRAGMA AUTONOMOUS_TRANSACTION;] 声明部分;BEGIN 程序部分; [R