基于JUPYTER的python主流库新手教程(上)
作者:二马传奇
0. 基本测试
for i in range(5): print(i,end=",")
讯享网
讯享网0,1,2,3,4,
1. numpy教程
1.1 numpy 基础函数
下面是arange方法的用法
import numpy as np warry=np.arange(0,1,0.2) print(warry)
讯享网[0. 0.2 0.4 0.6 0.8]
下面是linspace方法的用法
warry=np.linspace(0,1,5) print(warry)
讯享网[0. 0.25 0.5 0.75 1. ]
接着是logspace,用于创建等比数列,起始地址是取过对数之后的数字
warry=np.logspace(0,1,5) print(warry)
讯享网[ 1. 1. 3. 5. 10. ]
zeros方法同matlab,用法略有区别
print(np.zeros(4))
讯享网[0. 0. 0. 0.]
print(np.zeros([4,4]))
讯享网[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]
ones 方法,用法同zeros,全一矩阵,这和matlab也是相似的
print(np.ones([4,4]))
讯享网[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
diag 函数,对角矩阵,指定对角线元素,同Matlab
print(np.diag([1,2,3,4]))
讯享网[[1 0 0 0] [0 2 0 0] [0 0 3 0] [0 0 0 4]]
1.2 ndarray 对象属性和数据转换
ndim,秩;shape,数组维度;size,数组元素个数;dtype,数组类型;itemsize,数组中每个元素的字节大小;
warray=np.array([[1,2,3],[4,5,6]]) print('秩:',warray.ndim) print('形状:',warray.shape) print('元素个数:',warray.size) print('数据类型:',warray.dtype) print('数据元素字节大小:',warray.itemsize)
讯享网秩: 2 形状: (2, 3) 元素个数: 6 数据类型: int32 数据元素字节大小: 4
1.3 随机数生成方法
用randint生成指定范围的随机整数
print(np.random.randint(100,200,size=(2,4)))
讯享网[[102 144 157 134] [122 146 132 108]]
rand 函数生成[0,1]随机数组
print(np.random.rand(5))
讯享网[0.00 0. 0. 0. 0.]
1.4 数组变换
reshape 方法修改数组维度(-1表示数组维度可以通过本身来判断)
arr=np.array([[1,2,3,4],[5,6,7,8]]) print(arr) print(arr.reshape(4,-1))
讯享网[[1 2 3 4] [5 6 7 8]] [[1 2] [3 4] [5 6] [7 8]]
数组横向合并,通过hstack方法,传递的参数是两个矩阵构成的元组
arr1=np.arange(0,6,1).reshape(2,-1) arr2=arr1*2 print(np.hstack((arr1,arr2)))
讯享网[[ 0 1 2 0 2 4] [ 3 4 5 6 8 10]]
concatenate通过控制axis参数来控制横向或是纵向合并
print(np.concatenate((arr1,arr2),axis=0))
讯享网[[ 0 1 2] [ 3 4 5] [ 0 2 4] [ 6 8 10]]
相反的,也存在数组的横向或纵向的分割,通过hsplit或vsplit或split(axis)来控制
print(np.split(arr1,2,axis=0))
讯享网[array([[0, 1, 2]]), array([[3, 4, 5]])]
数组转置,T属性即可,或者transpose,这和matlab是非常像的
print(arr1.T)
讯享网[[0 3] [1 4] [2 5]]
1.5 ufunc函数
print(arr1<arr2)
讯享网[[False True True] [ True True True]]
print(arr1arr2)
讯享网[[ 1 1 16] [ 729 65536 ]]
ufunc函数的广播机制
x=np.array([[1,2,3],[2,3,4],[3,4,5]]) y=np.array([1,2,3]) print(x+y)
讯享网[[2 4 6] [3 5 7] [4 6 8]]
使用基本的逻辑运算实现数组的条件运算
arr1=np.array([1,2,3,5]) arr2=np.array([2,4,6,8]) cond=np.array([True,False,True,False]) print([(x if c else y)for x,y,c in zip(arr1,arr2,cond)])
讯享网[1, 4, 3, 8]
使用where方法处理大规模数组的条件逻辑运算
print(np.where(cond,arr1,arr2))
讯享网[1 4 3 8]
print(np.where(arr1>2))
讯享网(array([2, 3], dtype=int64),)
1.5 排序
sort方法进行排序
arr=np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]]) arr.sort(axis=1) print(arr)
讯享网[[2 4 5 9] [3 4 6 8] [1 2 4 6]]
argsort函数和lexsort函数可以返回原始数据在新数据中的下标
arr=np.array([[4,2,9,5],[6,4,8,3],[1,6,2,4]]) print(arr.argsort())
讯享网[[1 0 3 2] [3 1 0 2] [0 2 3 1]]
1.6 重复数据与去重
unique函数找到数组中的唯一值并返回已排序的结果
names=np.array([3,1,2,2,3,3,3,4,5,5]) print(np.unique(names))
讯享网[1 2 3 4 5]
使用tile和repeat实现数据重复
print(np.tile(names,2)) print(np.repeat(names,2))
讯享网[3 1 2 2 3 3 3 4 5 5 3 1 2 2 3 3 3 4 5 5] [3 3 1 1 2 2 2 2 3 3 3 3 3 3 4 4 5 5 5 5]
names=np.array([[1,2,3],[4,5,6]]) print(names.repeat(2,axis=0)) print(names.repeat(2,axis=1)) print(np.tile(names,2))
讯享网[[1 2 3] [1 2 3] [4 5 6] [4 5 6]] [[1 1 2 2 3 3] [4 4 5 5 6 6]] [[1 2 3 1 2 3] [4 5 6 4 5 6]]
1.7 常用统计函数
sum,mean,std,var,min,max
arr=np.arange(20).reshape(4,5) print('数组和:',np.sum(arr)) print('数组纵轴和:',np.sum(arr,axis=0)) print('数组横轴和:',np.sum(arr,axis=1)) print('数组的均值:',np.mean(arr)) print('数组横轴的均值:',np.mean(arr,axis=1)) print('数组标准差:',np.std(arr))
讯享网数组和: 190 数组纵轴和: [30 34 38 42 46] 数组横轴和: [10 35 60 85] 数组的均值: 9.5 数组横轴的均值: [ 2. 7. 12. 17.] 数组标准差: 5.5398
2. Pandas教程
pandas三种数据结构: series,dataframe,panel
2.1 series
import pandas as pd obj=pd.Series([1,-2,3,-4]) print(obj)
讯享网0 1 1 -2 2 3 3 -4 dtype: int64
i=["a","c","d","a"] v=[2,4,5,7] t=pd.Series(v,index=i,name="col") print(t)
讯享网a 2 c 4 d 5 a 7 Name: col, dtype: int64
两套索引方式:位置和标签
print(t[0]) print(t["a"])
讯享网2 a 2 a 7 Name: col, dtype: int64
通过字典创建Series
sdata={
'Ohio':35000,"Texas":71000,"Oregon":16000,"Utah":50000} obj3=pd.Series(sdata) print(obj3)
讯享网Ohio 35000 Texas 71000 Oregon 16000 Utah 50000 dtype: int64
states=['California','Ohio','Oregon','Texas'] obj4=pd.Series(sdata,index=states) print(obj3+obj4)
讯享网California NaN Ohio 70000.0 Oregon 32000.0 Texas .0 Utah NaN dtype: float64
就地修改Series的index
obj3.index=states print(obj3)
讯享网California 35000 Ohio 71000 Oregon 16000 Texas 50000 dtype: int64
2.2 DataFrame
由等长的列表或者字典创建
import numpy as np data={
'name':['张三','李四'],'sex':['female','male'],'city':['北京','上海']} df=pd.DataFrame(data,index=np.arange(2)) print(df)
讯享网 name sex city 0 张三 female 北京 1 李四 male 上海
df2=pd.DataFrame(data,columns=['name','sex','city','address'],index=['a','b']) print(df2)
讯享网 name sex city address a 张三 female 北京 NaN b 李四 male 上海 NaN
索引对象
print(df2.index) print(df2.columns)
讯享网Index(['a', 'b'], dtype='object') Index(['name', 'sex', 'city', 'address'], dtype='object')
插入索引
print(df2.index.insert(1,'w'))
讯享网Index(['a', 'w', 'b'], dtype='object')
DataFrame的基本属性: values,index,columns,dtypes,ndim,shape
print(df2.values) print(df2.ndim) print(df2.shape)
讯享网[['张三' 'female' '北京' nan] ['李四' 'male' '上海' nan]] 2 (2, 4)
重建索引:指的是重新给索引排序,使用reindex方法
obj=pd.Series([7.2,-4.3,4.5,3.6],index=['a','b','d','c']) print(obj) print(obj.reindex(['a','b','c','d','e'],fill_value=0))
讯享网a 7.2 b -4.3 d 4.5 c 3.6 dtype: float64 a 7.2 b -4.3 c 3.6 d 4.5 e 0.0 dtype: float64
前/后向填充:对于时间序列而言
import numpy as np obj=pd.Series([7.2,-4.3,4.5],index=[0,2,4]) print(obj.reindex(np.arange(6),method='ffill')) print(obj.reindex(np.arange(6),method='bfill'))
讯享网0 7.2 1 7.2 2 -4.3 3 -4.3 4 4.5 5 4.5 dtype: float64 0 7.2 1 -4.3 2 -4.3 3 4.5 4 4.5 5 NaN dtype: float64
更换索引
df5=df.set_index('city') print(df5)
讯享网 name sex city 北京 张三 female 上海 李四 male
数据查询
选取列(不可以使用切片)
w1=df['name'] w2=df[['name','city']] print(w1) print(w2)
讯享网0 张三 1 李四 Name: name, dtype: object name city 0 张三 北京 1 李四 上海
选取行(可以使用切片)
print(df[:2]) print(df[:1])
讯享网 name sex city 0 张三 female 北京 1 李四 male 上海 name sex city 0 张三 female 北京
使用loc同时索引和标签,索引选取行,标签选取列
print(df.loc[:,['name','city']]) print(df.loc[[0],['name']])
讯享网 name city 0 张三 北京 1 李四 上海 name 0 张三
使用iloc行和列均通过索引来选取
a={
'name':['王五','刘九'],'city':['深圳','广州'],'sex':['male','female']} df1=pd.DataFrame(a) df2=pd.concat([df,df1],ignore_index=True) print(df2) print(df2.iloc[[1,3],[1,2]])
讯享网 name sex city 0 张三 female 北京 1 李四 male 上海 2 王五 male 深圳 3 刘九 female 广州 sex city 1 male 上海 3 female 广州
布尔选择(同matlab)
print(df2[df2['city']=='上海'])
讯享网 name sex city 1 李四 male 上海
增加一行数据(append,concat)
append只能增加一行
data1={
'city':'南京','sex':'male','name':'马六'} df3=df2.append(data1,ignore_index=True) print(df3)
讯享网 name sex city 0 张三 female 北京 1 李四 male 上海 2 王五 male 深圳 3 刘九 female 广州 4 马六 male 南京
使用loc直接添加
df2.loc[5]=['沈七','male','武汉'] print(df2)
讯享网 name sex city 0 张三 female 北京 1 李四 male 上海 2 王五 male 深圳 3 刘九 female 广州 5 沈七 male 武汉
使用concat合并两个DataFrame(上面已经举过了例子)
增加一列数据(直接通过新标签赋值)
df2['age']=[19,20,56,28,39] print(df2)
讯享网 name sex city age 0 张三 female 北京 19 1 李四 male 上海 20 2 王五 male 深圳 56 3 刘九 female 广州 28 5 沈七 male 武汉 39
删除数据
删除数据的行
print(df2.drop(5))
讯享网 name sex city age 0 张三 female 北京 19 1 李四 male 上海 20 2 王五 male 深圳 56 3 刘九 female 广州 28
删除数据的列 axis=1,删除列,否则删除行,inplace=True直接在原数据上操作,否则返回一个副本
df2.drop('age',axis=1,inplace=True) print(df2)
讯享网 name sex city 0 张三 female 北京 1 李四 male 上海 2 王五 male 深圳 3 刘九 female 广州 5 沈七 male 武汉
2.3 函数应用和映射
map:将函数套用到Series的每个元素中
df2['age']=['19岁','20岁','56岁','28岁','39岁'] print(df2) def f(x): return int(x.split('岁')[0]) df2['age']=df2['age'].map(f) print(df2)
讯享网 name sex city age 0 张三 female 北京 19岁 1 李四 male 上海 20岁 2 王五 male 深圳 56岁 3 刘九 female 广州 28岁 5 沈七 male 武汉 39岁 name sex city age 0 张三 female 北京 19 1 李四 male 上海 20 2 王五 male 深圳 56 3 刘九 female 广州 28 5 沈七 male 武汉 39
apply:将函数套用到DataFrame的行与列上,通过axis参数设置
df3=pd.DataFrame(np.random.randn(3,3),columns=['a','b','c'],index=['app','win','mac']) print(df3) print('\n') df4=df3.apply(np.mean,axis=1) print(df4)
讯享网 a b c app 1. 0. 1. win 0. 0. 0. mac 1. -0. 0. app 1. win 0. mac 0. dtype: float64
applymap函数:将函数套用到DataFrame的每个元素上,用于批量处理大数据
df4=df3.applymap(lambda x:round(x,3)) print(df4)
讯享网 a b c app 1.194 0.778 1.952 win 0.318 0.213 0.291 mac 1.288 -0.946 0.726
2.4 排序
Series中,通过sort_index方法对索引进行排序,通过sort_values方法对数值进行排序
wy=pd.Series([2,6,5,4],index=['a','b','d','c']) print(wy) print(wy.sort_index()) print(wy.sort_values())
讯享网a 2 b 6 d 5 c 4 dtype: int64 a 2 b 6 c 4 d 5 dtype: int64 a 2 c 4 d 5 b 6 dtype: int64
利用by参数在一个DataFrame中按照某一个col_name来排序
wdf=pd.DataFrame(wy,columns=['num']) wdf['year']=['2019','2020','2016','2005'] print(wdf.sort_values(by='year'))
讯享网 num year c 4 2005 d 5 2016 a 2 2019 b 6 2020
2.5 汇总与统计
sum按行或列进行汇总
print('按列汇总:\n',df4.sum()) print('\n') print('按行汇总:\n',df4.sum(axis=1))
讯享网按列汇总: a 2.800 b 0.045 c 2.969 dtype: float64 按行汇总: app 3.924 win 0.822 mac 1.068 dtype: float64
用describe函数对数据进行初步统计
print('列描述') df4.describe().T
讯享网列描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61202.html