Python数据分析个人笔记4

一、数组连接和分割

1.合并

​ 1.按照列合并
​ np.hstick(tup)
​ tup:传入列表或者元组
​ return:返回合并完成的数组
2.按照行合并
​ np.vstick(tup)
​ tup:传入列表或者元组
​ return:返回合并完成的数组
3.指定轴的合并方式
​ np.concatenate((a1, a2, …), axis=0)
​ (a1, a2, ……):不仅仅可以传入元组,也可传入列表
​ axis:轴,默认值是0,是按行合并。当出入的值为1时,按照列合并

import numpy as np
 
# 行合并
a = np.array([1, 2, 3, 4]).reshape(1, 4)
b = np.array([2, 3, 4, 5]).reshape(1, 4)
print(np.vstack([a, b]))
print(np.concatenate([a, b]))
 
# 列合并
print(np.hstack([a, b]))
print(np.concatenate([a, b], axis=1))

# 输出
[[1 2 3 4]
 [2 3 4 5]]
[[1 2 3 4]
 [2 3 4 5]]
[[1 2 3 4 2 3 4 5]]
[[1 2 3 4 2 3 4 5]]

2.分割

​ np.split(ary, indices_or_sections)
​ ary:传入要进行操作的数组
​ indices_or_sections:传入数值或者传入一个列表,当传入的是一个数值的时候,是平均分配成几组。当传入一个列表的时候,是按照索引进行分类。比如,当传入列表[3, 8, 10]时,会按照0,1,2和3,4,5,6,7和8,9和10……这个方式分组。
​ return:返回的是一个装有分组状况的列表

import numpy as np
 
data = np.arange(20)
 
# 按照数值进行分割
print(np.split(data, 4))
 
# 按照索引列表进行分割
print(np.split(data, [3, 8, 10]))

# 输出
[array([0, 1, 2, 3, 4]), array([5, 6, 7, 8, 9]), array([10, 11, 12, 13, 14]), array([15, 16, 17, 18, 19])]
[array([0, 1, 2]), array([3, 4, 5, 6, 7]), array([8, 9]), array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])]

二、数组添加和删除元素

1.添加

append()函数

该函数是在数组的末尾添加元素,该函数会返回一个新数组,而原数组不变。使用 append()函 数的方法如下:

numpy.append(arr,values,axis)

对各个参数的说明:

  • 参数 arr 表示输入的数组;
  • values 表示向 arr 数组添加的元素,values 为数组,values 数组列维度与 arr 数组列维度相同;
  • axis 表示沿着水平或竖直方向完成添加操作的轴,axis 取 0 表示沿竖直方向操作,axis 取 1 表示沿水平方向操作。

如果未提供 axis 值,在添加操作之前输入数组会被展开,values 可以是单元素,也可以是任意数组,将 values 添加到 arr 数组后,该函数会返回一个新数组,而原数组不变。

import numpy as np
arr01 = np.arange(1,25).reshape(4,6)
# arr01输出
array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24]])

arr02 = np.arange(1,7)
# arr02输出
array([1, 2, 3, 4, 5, 6])

arr03 = np.arange(1,7).reshape(1,6)
# arr03输出
array([[1, 2, 3, 4, 5, 6]])

# 追加元素
np.append(arr01, arr03, axis=0)
array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24],
       [ 1,  2,  3,  4,  5,  6]])

arr04 = np.ones(shape=(4,1))
# arr04输出
array([[1.],
       [1.],
       [1.],
       [1.]])

np.append(arr01, arr04, axis=1)
array([[ 1.,  2.,  3.,  4.,  5.,  6.,  1.],
       [ 7.,  8.,  9., 10., 11., 12.,  1.],
       [13., 14., 15., 16., 17., 18.,  1.],
       [19., 20., 21., 22., 23., 24.,  1.]])

2.插入

insert()函数

该函数在给定索引之前,沿给定轴在输入数组中插入值。该函数会返回一个新数组,原数组不变。使用 insert() 函数的方法如下:

numpy.insert(arr,obj,values,axis)

对各个参数的说明:

  • 参数 arr 表示输入的数组;
  • obj 表示在其之前插入值的索引;
  • values 表示向arr数组插入的值,values值可为单元素或values数组,并且 values 数组行维度与arr数组列维度相同;
  • axis 表示沿着水平或竖直方向完成插入操作的轴,axis 取 0 表示沿竖直方向操作,即在 arr 数组行索引位于 obj 的位置处插入 values 值,axis 取 1 表示沿水平方向操作,即在 arr 数组列索引位于 obj 的位置处插入 values 值。

如果未提供 axis 值,在插入之前输入数组会被展开,values 可以是单个元素,也可以是一维数组,将 values 插入到 obj 的位置处,该函数会返回一个新数组,原数组不变。

另外,insert() 函数如果传递了 axis 参数,则插入 values 值时,会以广播值数组来配输入数组,即 np.insert(arr,2,[9],axis=0),其中 values 为 [9],arr 是 2 行 4 列数组,由于 axis=0,则插入值的数组列维度与arr数组列维度相同,因此,插入值数组为 1 行 4 列的数组,也就是广播值数组 [9,9,9,9]。

np.insert(arr01, 2, [1,1,1,1], axis=1)
array([[ 1,  2,  1,  3,  4,  5,  6],
       [ 7,  8,  1,  9, 10, 11, 12],
       [13, 14,  1, 15, 16, 17, 18],
       [19, 20,  1, 21, 22, 23, 24]])

3.删除

delete()函数

该函数返回从输入数组中删除指定子数组的新数组,原数组不变。与 insert() 函数的情况一样,如果未提供轴参数,则输入数组将展开。使用 delete() 函数的方法如下:

numpy.delete(arr,obj,axis)

对各个参数的说明:

  • 参数 arr 表示输入的数组;
  • obj 是用整数或者整数数组表示的从输入数组中删除的子数组,obj 可以用切片 numpy.s_[start🔚step] 表示要删除的子数组范围;
  • axis 表示沿着它删除给定子数组的轴,如果未提供 axis 值,则输入数组会被展开。

三、连接数组

连接意味着将两个或多个数组的内容放在单个数组中。在 SQL 中,我们基于键来连接表,而在 NumPy 中,我们按轴连接数组。我们传递了一系列要与轴一起连接到 concatenate() 函数的数组。如果未显式传递轴,则将其视为 0。

方法说明
numpy.concatenate(axis)沿现有轴连接一系列数组。
numpy.stack()沿新轴加入一系列数组。
numpy.block()从嵌套的块列表中组装一个 nd 数组。
numpy.vstack()垂直(按行)按顺序堆叠数组。
numpy.hstack()水平顺序堆叠数组(按列)。
numpy.dstack()按顺序深度(沿第三轴)堆叠数组。
numpy.column_stack()将一维数组作为列堆叠到二维数组中。
numpy.row_stack()垂直(按行)按顺序堆叠数组。
# 连接两个数组
import numpy as np

arr1 = np.array([1, 2, 3])

arr2 = np.array([4, 5, 6])

arr = np.concatenate((arr1, arr2))

print(arr)

# 沿着行 (axis=1) 连接两个 2-D 数组
import numpy as np

arr1 = np.array([[1, 2], [3, 4]])

arr2 = np.array([[5, 6], [7, 8]])

arr = np.concatenate((arr1, arr2), axis=1)

print(arr)

四、拆分数组

拆分是连接的反向操作。连接(Joining)是将多个数组合并为一个,拆分(Spliting)将一个数组拆分为多个。我们使用 array_split() 分割数组,将要分割的数组和分割数传递给它。

方法说明
numpy.split()将一个数组拆分为多个子数组,作为ary的视图。
numpy.array_split()将一个数组拆分为多个子数组。
numpy.dsplit()沿第 3 轴(深度)将数组拆分为多个子数组。
numpy.hsplit()将一个数组水平拆分为多个子数组(按列)。
numpy.vsplit()将一个数组垂直拆分为多个子数组(逐行)。

五、数组去重

方法说明
numpy.unique()查找数组的唯一元素。
data = np.array([[1,8,3,3,4],
                 [1,8,9,9,4],
                 [1,8,3,3,4]])
 #删除整个数组的重复元素      
uniques = np.unique(data)
print( uniques)
array([1, 3, 4, 8, 9])
 #删除重复行      
uniques = np.unique(data,axis=0)
print( uniques)
array([[1,8,3,3,4],
     [1,8,9,9,4]])
 #删除重复列
uniques = np.unique(data,axis=1)

六、数组排序

排序是指将元素按有序顺序排列。有序序列是拥有与元素相对应的顺序的任何序列,例如数字或字母、升序或降序。NumPy ndarray 对象有一个名为 sort() 的函数,该函数将对指定的数组进行排序。

# 对数组进行排序
import numpy as np

arr = np.array([3, 2, 0, 1])

print(np.sort(arr))

**注释:**此方法返回数组的副本,而原始数组保持不变。

您还可以对字符串数组或任何其他数据类型进行排序:

# 对数组以字母顺序进行排序
import numpy as np

arr = np.array(['banana', 'cherry', 'apple'])

print(np.sort(arr))
# 对布尔数组进行排序
import numpy as np

arr = np.array([True, False, True])

print(np.sort(arr))

如果在二维数组上使用 sort() 方法,则将对两个数组进行排序:

# 对 2-D 数组排序
import numpy as np

arr = np.array([[3, 2, 4], [5, 0, 1]])

print(np.sort(arr))

七、条件筛选

函数描述
msort(a)数组按第一个轴排序,返回排序后的数组副本。np.msort(a) 相等于 np.sort(a, axis=0)。
sort_complex(a)对复数按照先实部后虚部的顺序进行排序。
partition(a, kth[, axis, kind, order])指定一个数,对数组进行分区
argpartition(a, kth[, axis, kind, order])可以通过关键字 kind 指定算法沿着指定轴对数组进行分区

八、读写文件

1.二进制文件(NPY, NPZ)

方法说明
numpy.load()从.npy文件加载数组。
numpy.save()将数组保存为 .npy格式的二进制文件。
numpy.savez().npz将多个数组以未压缩格式保存到一个文件中。
numpy.savez_compressed().npz将多个数组以压缩格式保存到一个文件中。

2.文本文件

方法说明
numpy.loadtxt()从文本文件加载数据。
numpy.savetxt()将数组保存到文本文件。
numpy.genfromtxt()从文本文件加载数据,缺失值按指定处理。
numpy.fromregex()使用正则表达式解析从文本文件构造一个数组。
numpy.fromstring()从字符串中的文本数据初始化的新一维数组。
numpy.tofile()将数组作为文本或二进制文件写入文件。
numpy.tolist()将数组作为python列表返回。
import numpy as np
data = np.loadtxt('./data/class01.txt', delimiter=',')
data

array([1., 2., 3., 4., 5., 6.])

arr02 = np.arange(1, 25).reshape(4,6)
arr02

array([[ 1,  2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18],
       [19, 20, 21, 22, 23, 24]])

np.savetxt('./data/arr02.txt', arr02, fmt='%.4e', delimiter=',')

3.原始二进制文件

方法说明
numpy.fromfile()从文本或二进制文件中的数据构造一个数组。
ndarray.tofile()将数组作为文本或二进制文件写入文件(默认)。

4.数据源

方法说明
numpy.DataSource()通用数据源文件
  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红陌樱花vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值