NumPy(Numerical Python )
单一数据类型的多维数组ndarray
对数组快速处理的通用函数ufunc
numpy.genfromtxt()
从文本文件中获取数据
并提供缺失值处理等更复杂的操作
numpy.genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, skip_header=0,skip_footer=0, missing_values=None, filling_values=None, usecols=None, autostrip=False, max_rows=None, encoding='bytes'…) numpy.loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes',max_rows=None)
文件“8.5 score.csv” 保存学生成绩数据,其数据部分包括
整数、浮点数和缺失数据(郑君C 语言和VB 成绩缺失)
姓名,学号,C语言,Java,Python,VB,C++,总分 朱佳,0121701100511,75.2,93,66,85,88,407 李思,0121701100513,86, 76,96,93,67,418 郑君,0121701100514,, 98,76,,89,263 王雪,0121701100515,99, 96,91,88,86,460 罗明,0121701100510,95,96,85,63,91,430
fname:文件、字符串、字符序列或生成器
dtype:生成数组的数据类型,默认值是float,str表示字符串
numpy.genfromtxt()
import numpy as np file = '8.5 score.csv' data = np.genfromtxt(file, dtype=str, delimiter=',', encoding='utf-8') print(data) [['姓名' '学号' 'C语言' 'Java' 'Python' 'VB' 'C++' '总分'] ['朱佳' '0121701100511' '75.2' '93' '66' '85' '88' '407'] ['李思' '0121701100513' '86' ' 76' '96' '93' '67' '418'] ['郑君' '0121701100514' '' ' 98' '76' '' '89' '263'] ['王雪' '0121701100515' '99' ' 96' '91' '88' '86' '460'] ['罗明' '0121701100510' '95' '96' '85' '63' '91' '430']]
delimiter:用于定义如何拆分数据行,默认用空白字符分隔
skip_header:在文件开头跳过的行数,缺省值为skip_header=0
dtype=None 时,每个列的类型从每行的各列数据中迭代确定
import numpy as np file = '8.5 score.csv' data = np.genfromtxt(file,dtype=None,delimiter=',',skip_header=1,encoding='utf-8') print(data) [('朱佳', 121701100511, 75.2, 93, 66, 85, 88, 407) ('李思', 121701100513, 86. , 76, 96, 93, 67, 418) ('郑君', 121701100514, nan, 98, 76, -1, 89, 263) ('王雪', 121701100515, 99. , 96, 91, 88, 86, 460) ('罗明', 121701100510, 95. , 96, 85, 63, 91, 430)]
filling_values:用设置的值做作为默认值替代缺失数据
import numpy as np file = '8.5 score.csv' data = np.genfromtxt(file, dtype=None, delimiter=',', filling_values=0, skip_header=1, encoding='utf-8') print(data) [('朱佳', 121701100511, 75.2, 93, 66, 85, 88, 407) ('李思', 121701100513, 86. , 76, 96, 93, 67, 418) ('郑君', 121701100514, 0. , 98, 76, 0, 89, 263) ('王雪', 121701100515, 99. , 96, 91, 88, 86, 460) ('罗明', 121701100510, 95. , 96, 85, 63, 91, 430)]
names:值为None、True、字符串或序列之一
值为“True”时,跳过skip_header行数后读取的第1行作为字段名
import numpy as np file = '8.5 score.csv' data = np.genfromtxt(file, dtype=None, delimiter=',', names=True, filling_values=0, encoding='utf-8') print(data[['姓名', '学号', 'Python']]) # 以多个字段为索引时,放入列表中 [('朱佳', 121701100511, 66) ('李思', 121701100513, 96) ('郑君', 121701100514, 76) ('王雪', 121701100515, 91) ('罗明', 121701100510, 85)]
ufunc函数
通用函数,是对数组的每个元素进行运算的函数
数组的运算可以用运算函数,也可以写为数组运算表达式
import numpy as np a = np.array((1, 2, 3, 4, 5)) # 数组[ 1 2 3 4 5] b = np.array((6, 7, 8, 9, 10)) # 数组[ 6 7 8 9 10] print(np.add(a, b)) # 输出[ 7 9 11 13 15] print(a + b) # 输出[ 7 9 11 13 15] [ 7 9 11 13 15] [ 7 9 11 13 15]
内置随机数函数、三角函数、双曲函数、指数和对数函数、算术运
算、复数处理和统计等近百种数学函数,快速对数据进行各种运算
import numpy as np a = np.array((1, 2, 3, 4)) # 将元组转换为数组[1 2 3 4] print(np.sum(a)) # 数组元素求和,输出10 print(a ** 2) # 数组每个元素平方,[ 1 4 9 16] print(a % 3) # 数组每个元素对3 取模,[1 2 0 1] print(np.sqrt(a)) # 开方[1. 1.41421356 1.73205081 2. ] print(np.square(a)) # 每个元素2次方的数组,[ 1 4 9 16]
统计分析
数字型特征的描述性统计主要包括计算数字型数据的完整情况、最
小值、最大值、均值、中位数、极差、标准差、方差和协方差等
数字型特征的描述性统计主要包括计算数字型数据的完整情况、最
小值、最大值、均值、中位数、极差、标准差、方差和协方差等
import numpy as np arr = np.random.randint(100, size=(3, 4)) print(np.max(arr), np.argmax(arr)) # 数组最大值及位置序号,输出98 2 print(np.cumsum(arr)) # 数组元素逐个累加,[ 35 92 190 287 314 378 460 536 565 656 711 808] print(np.mean(arr)) # 返回平均值,输出67.33333333333333 print(np.median(arr)) # 返回中位数,输出70.0
数组切片
读文件返回数组,切片应用
data[行索引或切片,列索引或切片]
import numpy as np file = '8.5 score.csv' data = np.genfromtxt(file, dtype=str, delimiter=',', encoding='utf-8') print(data[0]) # ['姓名' '学号' 'C语言' 'Java' 'Python' 'VB' 'C++' '总分'] print(data[1:, 0]) # ['朱佳' '李思' '郑君' '王雪' '罗明'] print(data[0, 2:-1]) # ['C语言' 'Java' 'Python' 'VB' 'C++'] print(data[1:, 2:-1]) print(data[:, 0::7]) [['75.2' '93' '66' '85' '88'] ['86' ' 76' '96' '93' '67'] [' ' ' 98' '76' ' ' '89'] ['99' ' 96' '91' '88' '86'] ['95' '96' '85' '63' '91']] [['姓名' '总分'] ['朱佳' '407'] ['李思' '418'] ['郑君' '263'] ['王雪' '460'] ['罗明' '430']]