numpy的常用方法

这篇博客详细介绍了NumPy库在数组创建、计算、数据读取、索引、处理缺失值等方面的基础操作。包括使用`np.array()`创建数组、进行算术运算、 reshape、索引和切片,以及处理`nan`和`inf`的方法。同时,展示了如何读取CSV文件、进行数组拼接、随机数生成和统计计算。文章还涵盖了用NumPy处理`nan`的策略,如用均值填充缺失值,并给出了散点图的绘制示例,用于展示数据关系。
摘要由CSDN通过智能技术生成

01 创建数组

import numpy as np
#创建数组
t1 = np.array([1,2,3,])
print(t1)
print(type(t1))

t2 = np.array(range(10))
print(type(t2))
print(t2)

t3 = np.arange(4,10,2)
print(type(t3))
print(t3)

print(t3.dtype)

#创建指定类型数组
t4 = np.array(range(1,4),dtype=float)
print(t4)
t5 = np.array([1,1,0,1,0,0],dtype=bool)
print(t5)

#调整数据类型
t6 = t5.astype("int8")
print(t6)

#numpy中的小数
import random
t7=np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)
t8 = np.round(t7,2)
print(t8)

02 数组的计算

import numpy as np
t1 = np.arange(12)
print(t1.shape)
t2 = np.array([[1,2,3],[4,5,6]])
print(t2)
print(t2.shape)
t3 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(t3)
print(t3.shape)
t4 = np.arange(12)
print(t4.reshape((3,4)))

t5 = np.arange(24).reshape(2,3,4)
print(t5)
print(t5+2) #所有的都加2
print(t5*2)
print(t5/2)
print(t5.flatten()) #把数据转换成一维

t5 = t5.reshape(4,6)
t6 = np.arange(100,124).reshape((4,6))
print(t6)
print(t6+t5)

t7 = np.arange(0,6)
print(t7-t5)

t8 = np.arange(4).reshape((4,1))
print(t5-t8)

03 读取本地数据和索引

#numpy读取数据
import numpy as np
us_file_path = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/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)

04 numpy中的索引和切片

#取行
print(t2[2]) #第三行
#取多行
print(t2[2:])
#取不连续的多行,需要使用方括号,ndarray类型
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]])

#取行和列,第三行第四列的值
a = t2[2,3]
print(a)
print(type(a))

#取第三行到第五行,第二列到第四列的值
b = t2[2:5,1:4]
print(b)

#取多个不相邻的多个点
#选出来的结果 [0,1] [2,1] [2,3]
c = t2[[0,2,2],[0,1,3]]
print(c)
import numpy as np
t2 = np.arange(24).reshape(4,6)
t2[t2<10] = 3 #把小于0的数字都换成3
np.where(t2<10,0,10) #t<10为0,其他情况替换为10
print(np.where(t2<10,0,10))
print(t2.clip(10,18)) #<10替换为10,大于18的替换为18
t2 = t2.astype(float)
t2[3,3] = np.nan
print(t2)

05 numpy中的nan和常用方法

#数组的拼接
t1 = np.arange(12).reshape(2,6)
t2 = np.arange(12,24).reshape(2,6)
print(np.vstack((t1,t2))) #竖直拼接
print(np.hstack((t1,t2))) #水平拼接
#数组的行列交换
t = np.arange(12,24).reshape(3,4)
t[[1,2],:] = t[[2,1],:] #行交换
print(t)
t[:,[0,2]] = t[:,[2,0]] #列交换
print(t)

06 numpy中的随机方法

import numpy as np
#加载国家数据
us_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/US_video_data_numbers.csv"
uk_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/GB_video_data_numbers.csv"

#加载国家数据
us_data = np.loadtxt(us_data,delimiter=",",dtype=int)
uk_data = np.loadtxt(uk_data,delimiter=",",dtype=int)

#添加国家信息
#构造全为0的数据
zero_data = np.zeros((us_data.shape[0],1)).astype(int)
ones_data = np.ones((uk_data.shape[0],1)).astype(int)
#分别添加一列全为0,1的值
us_data = np.hstack((us_data,zero_data))
uk_data = np.hstack((uk_data,ones_data))

#拼接两组数据
final_data = np.vstack((us_data,uk_data))
print(final_data)
#创建一个全为1的数组
np.ones((2,3))
#创建一个全为0的数组
np.zeros((3,4))
#创建一个对角线为1的正方形数组
np.eye(10)
#获取最大值最小值的位置
t = np.eye(4)
np.argmax(t,axis=0)#按照列取
t[t==1] = -1
np.argmin(t,axis=1)#按照行取
#numpy生成随机数(10-20 4行5列)
np.random.seed(10)
np.random.randint(10,20,(4,5))

07 numpy中的nan和inf

nan(NAN,Nan):not a number不是一个数字
inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷
inf(-inf.inf):inf正无穷 -inf 负无穷

np.nan == np.nan #两个nan不相等
t2 = np.arange(0,24).astype(float).reshape(4,6)
t2[t2<10] = 3.
t2[t2>20] = 20.
t2[3,3] = np.nan
t2[:,0] = 0
np.count_nonzero(t2) #统计非零数字个数
np.count_nonzero(t2 != t2)#统计nan个数
np.count_nonzero(np.isnan(t2)) #统计nan个数

nan和任何值计算结果都是nan
np.sum(t3,axis=0) #计算列的和 axis=1计算行的结果

t2.mean(axis=0)#每列的均值
print(np.median(t2,axis=0))#每列的平均值
print(t2.max(axis=0))
print(t2.min(axis=0))
print(np.ptp(t2,axis=0))#最大值和最小值之差
print(t2.std(axis=0)) #标准差
#把nan替换为均值或中值,直接删除有nan的那一行
import numpy as np

#print(t1)
def fill_ndarray(t1): 
    for i in range(t1.shape[1]):
        temp_col = t1[:,i] #当前的一列
        nan_num = np.count_nonzero(temp_col != temp_col)
        if nan_num != 0: #不为0,说明当前这一列有nan
            temp_not_non_col = temp_col[temp_col == temp_col] #不是nan的值
            temp_col[np.isnan(temp_col)] = temp_not_non_col.mean() #nan赋值为平均值
    return t1
if __name__ == '__main__':
    t1 = np.arange(12).reshape((3,4)).astype("float")
    t1[1,2:] = np.nan
    print(t1)
    t1 = fill_ndarray(t1)
    print(t1)

在这里插入图片描述

#了解英国的youtube中视频的评论数和喜欢数的关系,散点图
import numpy as np
from matplotlib import pyplot as plt
#加载国家数据
us_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/US_video_data_numbers.csv"
uk_data = "E:/yanyi/python_study/14100_HM数据科学库课件/14100_HM数据科学库课件/day03/code/youtube_video_data/GB_video_data_numbers.csv"

#加载国家数据
#us_data = np.loadtxt(us_data,delimiter=",",dtype=int)
t_uk = np.loadtxt(uk_data,delimiter=",",dtype="int")
t_uk =t_uk[t_uk[:,1]<500000]#选择喜欢数比50万小的数据
t_uk_comment = t_uk[:,-1]
t_uk_like = t_uk[:,1]
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_like,t_uk_comment)
plt.show()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值