结合以下博客分析 [https://blog.csdn.net/weixin_44340318/article/details/105888864]
numpy数据类型分析
import numpy as np
import random
#使用numpy生成数组,得到ndarray的类型
t1 = np.array([1,2,3,])
print(t1)
print(type(t1))
t2 = np.array(range(10))
print(t2)
print(type(t2))
t3 = np.arange(4,10,2)
print(t3)
print(type(t3))
print(t3.dtype)
print("*"*100)
# numpy中的数据类型
t4 = np.array(range(1,4),dtype="i1")
print(t4)
print(t4.dtype)
# numpy中的bool类型
t5 = np.array([1,1,0,1,0,0],dtype=bool)
print(t5)
print(t5.dtype)
# 调整数据类型
t6 = t5.astype("int8")
print(t6)
print(t6.dtype)
# numpy中的小数
t7 = np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
# 取两位小数
t8 = np.round(t7,2)
print(t8)
加载文件+取行取列
import numpy as np
us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"
# t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
# print(t1)
print(t2)
print("*"*100)
#取行
# print(t2[2])
#取连续的多行
# print(t2[2:])
#取不连续的多行;注意方括号的使用
# print(t2[[2,8,10]])
# print(t2[1,:])
# print(t2[2:,:])
# print(t2[[2,10,3],:])
#取列
# print(t2[:,0])
#取连续的多列
# print(t2[:,2:])
#取不连续的多列
# print(t2[:,[0,2]])
#取行和列,取第3行,第四列的值
# a = t2[2,3]
# print(a)
# print(type(a))
#取多行和多列,取第3行到第五行,第2列到第4列的结果(包头不包尾)
#取的是行和列交叉点的位置
b = t2[2:5,1:4]
# print(b)
#取多个不相邻的点 此处应该注意
#选出来的结果是(0,0) (2,1) (2,3)
c = t2[[0,2,2],[0,1,3]]
print(c)
常见调用产生序列+求和等等
import numpy as np
t=np.arange(24).reshape((4,6))
print(t)
print('*'*100)
# np里面三元运算符(把t中小于等于3的数字替换为100,把大于3的替换为200)
print(np.where(t<=3,100,300))
print('*'*100)
# np里面的布尔索引(把t中小于10的数字替换为0)
t[t<10]=0
print(t)
print('*'*100)
#转换数据类型
t=t.astype(float)
t[3,3]=np.nan
print(t)
print('*'*100)
# 2行3列全为0
t1=np.zeros((2,3))
print(t1)
print('*'*100)
# 2行3列全为1
t2=np.ones((2,3))
print(t2)
print('*'*100)
# 3行3列对角线全为1
t11=np.eye(4)
print(t11)
print('*'*100)
#获取最大值最小值的位置,axis=1每一行的最值,axis=0每一列的最值
t[3,3]=10
print(t)
a=np.argmax(t,axis=1)
b=np.argmin(t, axis=0)
print(a,b)
print('*'*100)
# 产生4行5列10到20之间的随机数
print(np.random.randint(10,20,(4,5)))
print('*'*100)
# 统计数组不为了0的个数
print(np.count_nonzero(t))
print('*'*100)
# 统计数组中相等的个数
print(np.count_nonzero(t!=t))
print('*'*100)
# 统计每一列相加的结果
print(t)
print('*'*100)
print(np.sum(t,axis=0))
# 统计每一行相加的结果
print('*'*100)
print(np.sum(t,axis=1))
# 求每一列的和
print('*'*100)
print(t.sum(axis=0))
# 求每一列的均值
print('*'*100)
print(t.mean(axis=0))
# 求每一列的最大值最小值
print('*'*100)
print(t.max(axis=0))
print(t.min(axis=0))
# 求每一列的中值
print('*'*100)
print(np.median(t,axis=0))
print('*'*100)
print(t)
# 求每一列的极值
print('*'*100)
print(np.ptp(t,axis=0))
print('*'*100)
# 求标准差
print(t.std())
替换行列中nan的数值
import numpy as np
def a(t):
# t.shape[1]为列数,t.shape[0]为行数
for i in range(t.shape[1]):
# 取出某一列
ni=t[:,i]
# 判断有没有nan,有则计数
a=np.count_nonzero(ni!=ni)
if a!=0:
# 找出在这一列中除去nan,剩下的数值
notnan=ni[ni==ni]
# 将nan换成这一列平均值
ni[ni!=ni]=notnan.mean()
return t
if __name__ == '__main__':
# astype转换类型使np.nan不报错
t1 = np.arange(24).reshape(4, 6).astype('float')
t1[1, 2:] = np.nan
print(t1)
print('*'*100)
print(a(t1))
结果