Numpy:
导入numpy包
import numpy as np
创建数组:
直接创建:
a = np.array([1, 2, 3, 4, 5])
# [1 2 3 4 5]
通过函数创建:
zero_arr = np.zeros((3, 4)) # 构建3行4列的二维数组, 元素值为: 0
one_arr = np.ones((2, 3, 4)) # 构建2个, 3行4列的二维数组, 元素值为: 1
empty_arr = np.empty((3, 4)) # 3行4列的二维数组, 元素值为: 空(随机地址)
还可以使用array随机函数生成,与python中的range类似
arange_arr = np.arange(10, 20, 5) # 起始值: 10, 结束值: 20, 步长: 5
# 结果[10 15]
关于数组的属性举例:
print('数组的维度: ', data.shape) # (二维数组元素个数, 每个元素(一维数组)的元素个数.)
print('数组的轴是: ', data.ndim) # 几维数组, 轴就是几
print('数组中每个元素的类型是: ', data.dtype)
print('数组中每个元素的字节数为: ', data.itemsize)
print('数组的长度为: ', data.size)
print('数组的类型为: ', type(data))
二维矩阵的创建:
使用matrix()函数:数据使用空格或逗号隔开,数组与数组之间使用分号隔开
a = np.matrix("1,2;3,4")
>[[1 2]
[3 4]]
也可以直接传入
c = np.matrix([[1, 2, 3], [4, 5, 6]])
也可以随机生成数据:random
# 生成三行四列的数组
a = np.random.rand(3, 4) # rand 随机数, 范围是: 0.0 ~ 1.0
b = np.random.randint(-1, 5, size=(3, 4)) # randint 随机数(整数)自定义范围,例:-1~5
c = np.random.uniform(-1, 5, size=(3, 4)) # uniform 随机数(小数)自定义范围, 例:-1~5
数组可以分为等比数组与等差数组:
# 等比数组
# 参1: 起始值(10的n次方), 参2: 结束值(10的n次方), 参3: 元素的个数, 默认基础数字: 10
# a = np.logspace(参数1, 2, 3)
a = np.logspace(0, 2, 5)
# 可以通过base改变默认的10的n次方
b = np.logspace(0, 2, 5, base=2)
# 通过设置endpoint的值, 可以实现: 包左不包右
c = np.logspace(0, 2, 5, base=2, endpoint=False)
# 输出结果如下
[ 1. 3.16227766 10. 31.6227766 100. ]
[1. 1.41421356 2. 2.82842712 4. ]
[1. 1.31950791 1.74110113 2.29739671 3.03143313]
# 等差数组
# 参1: 起始值, 参2: 结束值, 参3: 元素的个数,也可以设置endpoint的值
a = np.linspace(0, 2, 5)
简要介绍一下numpy的基本函数:
print(np.ceil(10.3)) # 11, 向上取整, 天花板数.
print(np.floor(10.3)) # 10, 向上取整, 地板数.
print(np.rint(10.3)) # 10, 五舍六入
print(np.rint(10.51)) # 10, 五舍六入
print(np.rint(10.6)) # 11, 五舍六入
print(np.abs(-10.3)) # 10.3, 求绝对值
print(np.isnan(10.3)) # False, 不为空
print(np.multiply(10.3, 5.1)) # 乘法
print(np.divide(10, 3)) # 除法
print(np.where(10 > 3, 10, 3)) # 类似于三元表达式
a = np.random.randn(3, 4) # 返回标准的正态分布的数组
print(np.cumsum(arr)) # 累加和
print(np.sum(arr)) # 元素和
# axis控制行和列也可以写为 columns列 和 rows行
print(np.sum(arr, axis=1)) # 元素和按行统计
print(np.sum(arr, axis=0)) # 元素和按列统计
print(np.any(arr > 0)) # any类似于or
print(np.all(arr > 0)) # all类似于and
print(np.unique(arr)) # unique去重
np.sort(arr) # sort排序
Pandas:分为Series对象和DataFrame对象
import pandas as pd
# 创建series对象
s1 = pd.Series([1, 2, 3])
# 创建DataFrame对象
pd1 = pd.DataFrame({
'name': ['小明', '小红'],
'age': [17, 18]
})
pandas的作用一般是对于数据进行分析,首先我们要读取到数据:
# 读取文件的数据并设置索引列index_col
data = pd.read_csv('./data/nobel_prizes.csv', index_col='id')
# 获取数据
data.head(n) # 默认获取前五行,可以设置获取行数n
我们读取到的数据是一个DF(DataFrame)对象,可以换取单行单列(Series对象)的数据进行详细的数据分析。
Series的常用属性方法如下:
# Serie:
s1 = data.loc[1] # 内容为1开头的,不是索引
print(s1.index) # 获取索引, 即: 列名.
print(s1.values) # 获取该行的数据
print(s1.mean()) 平均值
print(s1.max()) #最大值
print(s1.min()) # 最小值
print(s1.std()) # 标准差
print(s1.count()) # 统计非空值
print(s1.shape) # 数组的维度
print(s1.describe()) # 统计详细信息
DataFrame对象常用使用:
print(type(movie)) # <class 'pandas.core.frame.DataFrame'>
print(s2.shape) # DataFrame对象的属性, 即: 行列
print(s2.size) # df对象的 数据个数
print(s2.ndim) # df对象的轴, 2, 表示二维数组.
print(s2.head()) # 前5条
print(s2.tail()) # 后5条
print(s2.info()) # 查看列名, 数据类型, 是否有空值等...
print(len(s2)) # 行数.
print(s2.count()) # 统计各列的总数据数, 只统计非null值.
print(s2.min()) # 统计各列的最小值
print(s2.describe()) # 统计各列的详细信息
操作DF对象的行索引:
df2 = DF.set_index('索引列名') # 设置索引列
df3 = df2.reset_index # 重置索引列
# 添加inplace=True(默认值是False), True: 表示修改原始df对象, False表示返回新的对象.
DF.set_index('movie_title', inplace=True)
# 可以在读取文件时直接设置索引列index_col
修改DF对象的行名和列名:
分别将行名和列名存入两个字典中,然后使用rename函数进行更改
# 定义字典, 表示要修改的行索引名 及其 对应修改后的值
idx_rename = {'原行名':'新行字', ......}
# 定义字典, 表示要修改的列名 及其 对应修改后的值
cols_rename = {'原列名':'新列名'......}
# 通过rename函数修改 行索引名 和 列名
DF.rename(index=idx_rename, columns=cols_rename)
也可以使用列表,先读取列名和行名用列表存储,更改,在重新赋值回去
# 读取数据
movie = pd.read_csv('data/movie.csv', index_col='movie_title')
# 获取df对象的 行索引信息.
index_old = movie.index
# 获取df对象的 列名.
columns_old = movie.columns
# 4. 将行索引信息 和 列名 转成列表.
index_list = index_old.to_list()
columns_list = columns_old.to_list()
# 5. 修改行索引名
index_list[0] = '阿凡达'
# 6. 修改列名
columns_list[0] = '颜色'
# 7. 用修改后的新的 行索引名 和 列名, 重新赋值回去.
movie.index = index_list
movie.columns = columns_list
DF对象的添加,删除,插入:
# 给DF添加新列
DF['新列名'] = 新列数据
# 删除列
DF.drop()
# 插入列
DF.insert()
DF中的loc和iloc加载行列:
# 加载单行
print(df.loc[0]) # 内容
print(df.iloc[0]) # 索引
# 加载多行
print(df.loc[[0, 1, 2]]) # 内容
print(df.iloc[[0, 1, 2]]) # 索引
# 加载指定的行列:df.loc[[行], [列]], df.iloc[[行], [列]]
print(df.loc[:, ['country', 'year']]) # : 在这里表示所有行.
print(df.iloc[:, [0, 2, -1]]) # : 在这里表示所有行. -1代表最后1列