Python numpy 与pandas
1.安装
pip3 install numpy
pip3 install pandas
2.npmpy基本操作
import numpy as np
# 创建一个一维数组
d1 = np.array([1,2,3,4,5])
# 查看数组长度
print(d1.size)
# 查看数组维度
print(d1.ndim)
# 二维数组
d2 = np.arange(15)
d2 = d2.reshape(3,5)
# d2 = np.arange(15).reshape(3,5)
# 遍历
for index,value in np.ndenumerate(d2):
print(f'{index}的值{value}')
# 第二种创建方法
data1 = [[1,2,3],[4,5,6]]
# 查询数组的结构 返回的是一个元组 第一个元素表示行数,第二个元素表示列数
print(data1.shape)
# 创建全是0的数组
data2 = np.zeros(10)
data3 = np.zeros((2,5))
data4 = np.zeros((2,3,5))
# 遍历三维度数组
# for index,value in np.ndenumerate(data5):
# print(f'索引{index}对应的值{value}')
data6 = np.ones((2,6))
print(data6)
# 转换类型
data = np.array(data,dtype=float)
data = data.astype(np.int64)
# 查询数组元素的类型
print(data.dtype)
# 切片
# 二维数组
# data= np.arange(14).reshape(2,7)
# print(data)
# # 逗号前面是匹配行数据,后面是匹配列数据
# print(data[1:,:3])
# print(data[:,3:4])
# print(data[1:,3:4])
# 三维数组
data = np.arange(30).reshape(2,3,5)
print(data)
# 逗号前面是匹配层数,后面是匹配行列数据
print(data[0:1,2:,:])
print(data[0:1,2:,:][0,0,2])
print(data[0:1,2:,2:3])
# 求方差
"""
方差 = (1-均值)**2 + (2-均值)**2 + (3-均值)**2 + (4-均值)**2 + (5-均值)**2
(1-3)**2 + (2-3)**2 + (3-3)**2 + (4-3)**2 +(5-3)**2 = 4+1+0+1+4 = 10
10/5 = 2 方差
"""
# d4 = np.var(data)
# print(d4)
# # 求标准差
"""
标准差 = 方差的开根号
根号2 = 1.4142135623730951
"""
# d5 = np.std(data)
# print(d5)
# 聚合运算
# data = np.array([1,2,3,4,5])
# # 累加
# print(np.sum(data))
# # 累乘
# print(np.prod(data))
# # 最大值
# print(np.max(data))
# # 最小值
# print(np.min(data))
# # 最大值的索引
# print(np.argmax(data))
# # 最小值的索引
# print(np.argmin(data))
# # 比较运算
# data1 = np.array([1,2,3,4,5])
# data2 = np.array([2,3,4,5,6])
# # 比较两个数组中对应元素的大小
# print(np.greater(data1,data2))
# # 比较两个数组中对应元素的大小
# print(np.greater_equal(data1,data2))
# # 比较两个数组中对应元素的大小
# print(np.less(data1,data2))
# 筛选与排序
# data = np.array([1,2,3,4,5,6,7,8,9,10])
# print(np.where(data >3)) # 输出的是索引值并不是元素值
# print(np.sort([5,4,3,2,1]))
# # 降序
# print(np.sort([5,4,3,2,1])[::-1])
# 什么是矩阵
# 矩阵是一个二维数组
"""
a = [1,2,3,4,5]
b = [100,200,300,400,500]
[1,2,3,4,5]
[[100,200,300],[400,500,600]]
1*100,2*200,3*300,
1*400,2*500,3*600
注意:矩阵计算的条件
"""
a = np.arange(15).reshape(3,5)
b = np.arange(15,30).reshape(3,5)
c = np.array([9,8,7,6])
print(a)
print(b)
print(c)
# 矩阵加
print(a+b)
# 矩阵减
print(a-b)
# 矩阵乘
print(2*a)
print(a*b)
# 使用numpy的矩阵相乘需要对a进行转置
a = a.T
print(a)
print(np.dot(a,b))
3.pandas
import pandas as pd
import numpy as np
data = {'apples':[3,2,0,1],'oranges':[0,3,7,2]}
# 通过DataFrame进行格式转换
data = pd.DataFrame(data)
print(data)
print(type(data))
# 提取某一列数据
app = data('apples')
print(app)
# 跳转顺序显示数据
app = pd.Series(app,index[3,2,0,1])
# 重置索引 索引变 值不变
print(app.reset_index(drop=True))
# 创建30个日期数据
# 创建一个dataframe格式的数据,由2010101开始
# periods:生成的日期个数
# freq:生成的日期频率,D:日,W:周,M:月,Q:季度,Y:年
dates = pd.date_range('20210101',periods=30,freq ='ME')
# 创建一个30行3列的随机数
# index:索引值 数组的左侧索引值由dates组成
# columns:列名分别位A B C
data = pd.DataFrame(np.random.rand(30,3),index=dates,columns=list('ABC'))
print(data)
# 获取头部的数据默认五行 可以调参数
print(data.head(3))
pirnt(data.head())
# 尾部
print(data.tail(3))
# 获取索引
print(data.index)
# 获取列名
print(data.columns)
# 查看数据
print(data.values)
# 转换成numpy格式
print(data.to_numpy())
# 查看统计摘要
print(data.describe())
# 获得列数据
print(data['A'])
print(data[['A','B']])
# 获得行数
print(data[0:10])
# 行列同时切片
print(data.loc['20210101':'20220101'],'A':'B')
# 四舍五入
# round(数据,保留小数后几位)
data = round(data,2)
# 条件筛选
print(data[data['A']==0.95]['A'])
# 去除缺失的值
print(data.droppna())
# 去重
print(data.drop_duplicates())
# 数据的排序
print(data.sort_values('A',asceding=False))
# 对索引
print(data.sort_index(ascending=False))