两个重要的包:numpy,pandas
01创建array ,数组(能矢量计算)
#01 构造方法
np.array([裂表])
#02 二维数组
data=[[1,2,3,4],[5,6,7,8]]
arr2=np,array(data2)
arr2.shape #输出形状 out(2,4) 2行 4 列
#03 用元组创建array
data3=(1,2,3,4,5)#tuple()
arr3=np.array(data)
arr3#out:array([1,2,3,4,5])
#04 构建方法
arr6=np.zeros((3,2))# 创建一个三行两列的 全0数组
arr6_1=np.zeros_like(arr6)# 形状和arr6 相同的全0
arr7=np.ones((3,2)) # 全0数组
# 05 正太分布数组
arr9=np.empty(20)
#06 有序构建 range 的步长不能为浮点型 arange()可以浮点 属于python 范畴
arr10=np.array(range(10))
# 07 np.arange 属于numpy 范畴 numpy 是python写的,(理解继承和多态)
arr10_1=np.arange(1,10,0.1)
arr10_1
# 08 创建随机数组
np.random.rand(10)
arr12=np.random.randn(10000)#创建正太分布随机数组
arr12.mean() # 计算平均数
arr12.std() # 计算标准差
# 09创建带形状的随机数组
np.random.seed(42) # 指定随机种子42
arr13=np.random.randint(1,100,10).reshape(5,2)
arr13
#10 创建线性数组
arr14=np.linspace(11,21,100,endpoint=False)# 从11 切到21,切100份,结尾为False 不包括
# 11 创建单位矩阵
arr15=np.eye(5)# 5行5列
arr15
# 03矢量计算
arr3*2 #arr3 所有元素乘以2
#04索引
arr2[0] 取出第0行
#05赋值
arr2[0]=5 # 让0行等于5
#06 字典和集合可以创建 array 但不支持矢量计算
######################################
#numpy 方法
# numpy 的常用属性和方法
import numpy as np
data1 = [[6, 7.5, 8, 0, 1],[1,2,3,4,5]]
arr1 = np.array(data1)
# print(data1)
# print(arr1) # 输出数组,注意和列表的区分
print(arr1.ndim) # 输出数组维度的个数
print(arr1.shape) # 输出数组的维度,即数组是几行几列组成的
print(arr1.size) # 输出数组的元素总数,对于m行n列的数组,元素总数为m*n
print(arr1.dtype) # 输出数组元素的类型
print(arr1.itemsize) # 输出元素占用字节的大小
arr1
1.1单位矩阵案例
arr15=np.eye(5)
arr15
输出:
02 方法
# 01 布尔索引, axis=0为行,=1为列
import numpy as np
names=np.array(['1','2','3','4','5','6','7'])
col=np.array(range(4))
data=np.random.randn(7,4)
print(data[names=='2'])# 原理: names=='2' 会out出一个array([False, True, False, False, False, False, False]),给data,data输出当array=true这一行
data[names=='2',col==1]# 行和列同时索引
data[names=='2',(col==1)|(col==2)] # 逻辑或,记得加括号 先行后列
#02 花式索引
arr[[4,1]]# 先取第四行,再取第一行
arr[[4,3,7]]
arr[[-1,-3,3]]
# 03 转置
arr.T # 行列互换,arr[0,0] 不变,左下角和右上角的元素互换位置 属性
arr.transpose #方法 结果和上面一样
#04 函数
arr=np.array([1,np.e,np.e**2,0])
print("数组最大值:%s"%(np.max(arr)))
print("数组最小值:%s"%(np.min(arr)))
print("以e为基数求e的数组次方%s"%np.exp(arr))
print("以10为低求数组对数%s"%np.log(arr))
print("开方%s"%np.sqrt(arr))
print("平均值%s"%np.mean(arr))
print("标准差%s"%np.std(arr))
print("极小值%s"%np.argmin(arr))
print("极大值%s"%np.argmax(arr))
print("判断极限值:%s"%np.isinf(arr))
# 05 where 应用
xarr
yarr
cond # 条件返回True 或False
# 案例
np.where(cond,xarr,yarr) # 当cond为true时,从xarr取值,否则从yarr取值(方法)
#06 sort排序
np.sort(arr)
np.sort(arr,axis=1) #按列排序
#07 堆叠 要求堆叠方向维度一致
arr1
arr2
np.hstack((a,b)) #横向堆叠 往右侧加
np.vstack((a,b)) # 纵向堆叠 往底部加 可联合 arr.T 一起用
#08 数据自动向上转型
np.arange(5,dtype='float64')
# 09 广播机制
03创建Series nan类型是浮点型
import numpy as np
import pandas as pd
#创建代码
ser=pd.Series(可迭代对象,数据类型)这时index会默认1234567.。。
ser2=pd.Series(可迭代对象,index=[])
#引用
ser[]
ser.isnull()
pd.isnull(ser)
04DataFrame
import numpy as np
import pandas as pd
#01 创建方式,
data={"city":['a','b','c','d'],
"year":[1,2,3,4],
'population':1,2,3,4]}
fram=pd.DataFrame(data)
##键成了列名
# 02索引的单列是series
frame['year']
#03 frame 的列花式索引
frame['population',"city","year"]
#04 增加一列为空值
frame2=pa.DataFrame(data,clumns=['population',"city","year",'debt'])# 指定clumns
## 新增的debt 列,值全部为NaN
# 05 index
frame2.index
# 06 values
frame2.values # 是一个数组array
# 07 DataFramed 格式
frame2=pd.DataFrame(data,clumns=['population',"city","year",'debt'],
index=[])# 指定clumns 列名,行名 注意:列可以多指定,行不能多指定
# 08 嵌套字典生成 DAtaframe
pop={"北京":{2001:2.4,2002,2.9},
'南京':{2000:1.5,2001:1.7,2002,3.6)}
frame3=pd.DataFrame(pop)
## out:"北京",南京为列名,2000,2001,2002,变成行名
# 1.2 索引
##1.2.1 列索引
# 方法1
frame2['city'] #方法
#02
frame2.city #属性
# 03 loc 进行行+列索引
frame2.loc[ ['a','b'], ['year','poplation'] ] # 前面行,后面列
# 04 iloc用整数进行索引
frame2.iloc[0:2,0:3]
frame2.iloc[0:2,0:3]
frame2.iloc[0:2,[0,3]] # 取0,3两列
###1.2.2 运算
# 01 赋值
frame2['debt']=1.5
#02 删除
del frame2['debt']
#02.1删除行或列
frame2.drop(['year'],axis=1,inplace=False) # 默认方向axis=0 行方向 inplace控制是否在原数据上删除
#03 添加 创建新列
frame2['location']=['1','2','3','4'] #行数要对应上
#04 apply方法
farme=pd.DataFrame(np.random.randn(4,3),colums=list('bde'),index=list('1234'))#4行3列
def function:
return x+1
frame['b'].apply(function)
frame['b'].apply(lambda x:x+1)
#05 索引排序: sort_index 有两个索引,一个行索引,一个列索引 默认对行进行排序,按行的名字字母排列 顺序(默认升序)
frame.sort_index() #按字母对行的名字进行排序
frame.sort(axis=1,ascending=False) #按列降序
# 06 对value 也就是说对dataframe的数值数据进行排序
# #列方向
frame.sort_values(by='b',ascending=False) # False 代表降序,从大到小
#7 数据单不重复详情集
frame.列名.unique
# 8删除重复数据
frame.drop_duplicates(['列1','列2']keep='last'(frist))
#9 显示重复数据 返回列表
frame.duplicated()
#10 填充值
frame.列名.fillna(frame.列名.mean())#mode() std
frame.列名.fillna({第几列:值,第几列:值})# 字典填充
frame.列名.fillna(method='ffill',limit=n)# 前向填充 bfill 后向 limit 限制填充
# 11 map 映射
frame.列名.map.(字典)
apply 和 data.replace 也可以达到
以下是乱七八糟的运行截图
————————————————————————————————————————————————
lambda
映射函数map()
- x代表后面列表中每一个数,x+2表示将每一个x加2
list1=map(lambda x:x+2,[1,2,3,4,5,6,7,8,10,12])#加2
list(list1)
结果:
filter 过滤函数
筛选出x%2==0的数
-reduce 累计算数 计算[1,2,3,45,5,6,7,8] 累加结果
from functools import reduce
a_2=reduce(lambda x ,y:x+y ,[1,2,3,45,5,6,7,8])
------在这里插入代码片
numpy
import numpy as np
my_arr=np.arange(1000000)
矩阵运算
#1.4数组运算
arr = np.array([[1,2,3],[4,5,6]])
arr
#自加
print(arr+arr)
print("---------")
#自减
print(arr-arr)
print("---------")
#所有数乘5
print(5*arr)
print("---------")
#自乘
print(arr*arr)
print("---------")
#矩阵运算
print(arr.dot(arr.T))#矩阵运算(行乘列)
矩阵索引
import numpy as np
np1=np.array([1,2,3,4,5,6,7,8,9]).reshape(3,3)#方法1
np2=np.array([[1,2,3],[4,5,6],[7,8,9]])#方法2
np3=np.arange(9).reshape(3,3)#方法3
#np.zores()
print(np1)
print("----------")
print(np2)
print("----------")
print(np3)
执行结果
索引
axis0代表列
axis1代表行
arr[i,j],其中 i代表行数,j代表列数,
print("索引坐标(0,0):",np3[0,0])
print("----------")
print("索引所有行和列:",np3[0:3,0:3])
代码结果:
函数
1.常用函数
arr=np.array([1,np.e,np.e**2,0])
print("数组最大值:%s"%(np.max(arr)))
print("数组最小值:%s"%(np.min(arr)))
print("以e为基数求e的数组次方%s"%np.exp(arr))
print("以10为低求数组对数%s"%np.log(arr))
print("开方%s"%np.sqrt(arr))
print("平均值%s"%np.mean(arr))
print("标准差%s"%np.std(arr))
print("极小值%s"%np.argmin(arr))
print("极大值%s"%np.argmax(arr))
print("判断极限值:%s"%np.isinf(arr))
运行结果:
2.提高函数 where 函数
#where 判断
xarr_1=np.array([1,2,3,4,5,6,7,8])
yarr_2=np.array([1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8])
cond=([True,False,True,True,True,False,False,False])
np.where(cond,xarr_1,yarr_2)
结果:
2020 中科js
01去除pandas dataframe科学计数法
pd.set_option('float_format', lambda x: '%.0f' % x)
02删除重复值
data.drop_duplicates(['列名'],keep='first')
03 dataframe 匹配模糊values
data.字段名[data.字段名.str.contains('正则表达式')] #正则表达式点号 加 “\”