Pandas入门(二)
一、基本功能
1.1 重新索引
pandas对象的一个重要方法就是reindex,其作用是创建一个新的对象,它的数据符合新的索引:
123456789101112131415161718192021222324import pandas as pdobj = pd.Series([4.5, 7.2, -5.3, 3.6], index=["d", "b", "a", "c"])print("-----obj-----")print(obj)# reindex根据索引进行重排,如果某个索引值当前不在,就引入缺失值obj2 = obj.reindex(["a", "b", "c", "d", "e"])print("----obj2-----")print(obj2)# 结果-----obj----d 4.5b 7.2a -5.3c 3.6dtype: ...
Pandas入门(一)
Pandas中含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。
pandas经常和其它工具一同使用,如数值计算工具NumPy和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib。pandas是基于NumPy数组构建的,特别是基于数组的函数和不使用for循环的数据处理。
虽然pandas采用了大量的NumPy编码风格,但二者最大的不同是pandas是专门为处理表格和混杂数据设计的。而NumPy更适合处理统一的数值数组数据。
一、pandas的数据结构介绍
熟悉pandas的两个主要数据结构:Series和DataFrame。它们为大多数应用提供了一种可靠的、易于使用的基础。
1.1 Series
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:
123456789101112import pandas as pdfrom pandas import Series, DataFrameobj = pd.Series ...
Numpy入门(四)
一、用于数组的文件输入和输出
NumPy能够读写磁盘上的文本数据或二进制数据。这里只讨论NumPy的内置二进制格式。
np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为**.npy**的文件中的:
123456import numpy as nparr = np.arange(10)np.save('some_array', arr) # 如果文件路径末尾没有扩展名.npy,则该扩展名会被自动加上print(np.load('some_array.npy'))# 结果[0 1 2 3 4 5 6 7 8 9]
通过np.savez可以将多个数组保存到一个未压缩文件中,将数组以关键字参数的形式传入即可,然后加载.npz文件时,你会得到一个类似字典的对象,该对象会对各个数组进行延迟加载::
12345678···arr1 = np.arange(11)np.savez('array_archive.npz', a=arr, b=arr1)arch = np.lo ...
Numpy入门(三)
一、用于布尔型数组的方法
布尔值在进行数学统计方法时会被强制转换为1(True)和0(False)。因此,sum经常被用来对布尔型数组中的True值进行计数。
123456import numpy as nparr = np.random.randon(100)print((arr > 0).sum())# 结果print(56) # 因为arr是随机生成的符合正态分布的数据,因此该结果不一定相同
any和all方法对布尔型数组非常有用。any用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True:
12345678···bools = np.array([False, True, True, False])print(bools.any())print(bools.all())# 结果TrueFalse
这两个方法也能用于非布尔型数组,所有非0元素将会被当做True。
二、排序
2.1 一维数组
Numpy数组也可以通过sort方法进行就地(inplace)排序。
12345678910111213import numpy as nparr = n ...
线性代数零散知识点
一、内积
当计算矩阵的内积时,我们需要将第一个矩阵的每一行与第二个矩阵的每一列进行对应元素的乘积运算,并将结果相加得到最终的矩阵。
让我们以示例代码中的矩阵A和矩阵B为例进行说明:
矩阵A:
12[[1 2] [3 4]]
矩阵B:
12[[5 6] [7 8]]
首先,我们需要确定最终的矩阵C的维度。根据矩阵乘法的规则,A是一个2×2的矩阵,B是一个2×2的矩阵,所以C的维度将是2×2。
接下来,我们按照矩阵乘法的定义,计算C的每个元素。以C的第一个元素c[0][0]为例:
123c[0][0] = a[0][0]*b[0][0] + a[0][1]*b[1][0] = 1*5 + 2*7 = 19
同样的方式,我们可以计算得到C的其他元素:
1234567891011c[0][1] = a[0][0]*b[0][1] + a[0][1]*b[1][1] = 1*6 + 2*8 = 22c[1][0] = a[1][0]*b[0][0] + a[1][1]*b[1][0] = 3*5 + 4*7 = ...
Numpy入门(二)
一、数组转置和轴对换
1.1 矩阵转置
转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性:
123456789101112131415import numpy as nparr = np.arange(15).reshape((3,5))print(f'arr的值为:{arr}')print(f'arr的值为:{arr.T}')# 结果arr的值为:[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]arr的值为:[[ 0 5 10] [ 1 6 11] [ 2 7 12] [ 3 8 13] [ 4 9 14]]
在进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积:
12345678910111213141516import numpy as nparr = np.random.randn(6, 3)print(f'arr的值为 ...
Numpy入门(一)
一、Numpy基础知识
NumPy最重要的一个特点就是其N维数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。可以利用这种数组对整块数据执行一些数学运算,语法跟标量元素之间的运算一样。
1.1 按元素简单运算
12345678910import numpy as npdata = np.random.randn(2,3) # 随机生成一个2x3的数组,符合标准正态分布print(type(data), '\n' ,data)print("-----元素相乘-----")data_mul = data * 10print(type(data_mul), '\n' ,data_mul)print("-----元素相加-----")data_sum = data + dataprint(type(data_sum), '\n' ,data_sum)
以上例子中,所有的元素都乘以10,每个元素都与自身相加,其结果输出如下:
1234567891011<class ...
常用第三方模块
一、Pillow
1.1 安装Pillow
如果安装了Anaconda,Pillow就已经可用了。否则,需要在命令行下通过pip安装:
1$ pip install pillow
如果遇到Permission denied安装失败,请加上sudo重试。
1.2、操作图像
来看看最常见的图像缩放操作,只需三四行代码:
123456789101112from PIL import Image# 打开一个jpg图像文件,注意是当前路径:im = Image.open('test.jpg')# 获得图像尺寸:w, h = im.sizeprint('Original image size: %sx%s' % (w, h))# 缩放到50%:im.thumbnail((w//2, h//2))print('Resize image to: %sx%s' % (w//2, h//2))# 把缩放后的图像用jpeg格式保存:im.save('thumbnail.jpg', 'jpeg')
其他功能如切 ...
常用内建模块(二)
一、Base64
Base64是一种用64个字符来表示任意二进制数据的方法。
用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。Base64是一种最常见的二进制编码方法。
Base64的原理很简单,首先,准备一个包含64个字符的数组:
1['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
然后,对二进制数据进行处理,每3个字节一组,一共是3x8=24bit,划为4组,每组正好6个bit:
base64-encode
这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。
所以,Base64编码会把3字节的二进制数据编码为4字节的文本数据, ...
常用内建模块(一)
一、datetime
datetime是Python处理日期和时间的标准库。
1.1 获取当前日期和时间
123456789from datetime import datetimenow = datetime.now()print(now)print(type(now))#结果2023-07-30 16:52:03.452670<class 'datetime.datetime'>
注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。
如果仅导入import datetime,则必须引用全名datetime.datetime。
datetime.now()返回当前日期和时间,其类型是datetime。
1.2 获取指定日期和时间
指定某个日期和时间,我们直接用参数构造一个datetime:
123456from datetime import datetimedt = datetime(2015, 4, 19, 12, 20)pr ...