基于JUPYTER的python主流库新手教程(上)

基于JUPYTER的python主流库新手教程(上)基于 JUPYTER 的 python 主流库新手教程 上 作者 二马传奇 0 基本测试 for i in range 5 print i end 0 1 2 3 4 1 numpy 教程 1 1 numpy 基础函数 下面是 arange 方法的用法

大家好,我是讯享网,很高兴认识大家。

基于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 
讯享网列描述 
小讯
上一篇 2025-02-14 12:27
下一篇 2025-01-07 21:42

相关推荐

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