numpy-创建/修改数组

文章目录

  • numpy创建数组
  • 数组的形状
    • numpy数据的读入
      • numpy数据的转置
    • numpy切片和索引取值
    • numpy中数值的修改
    • 数据的修改和替换
    • 行列上的计算
    • numpy中填充nan------
      • 练习
  • 数据的拼接
  • 数组行列的交换
      • 获取行的最大值、最小值
      • 生成随机数

numpy创建数组

import numpy as np
#使用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)
#t3=np.arange(10).reshape(2,5)#0-9的2行5列数组
print(t3)
print(type(t3))

print(t3.dtype)#
#numpy中的数据类型
t4=np.array(range(1,4),dtype=float)
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中的小数
import random
t7=np.array([random.random()for i in range(10)])
print(t7)
print(t7.dtype)

t8=np.round(t7,2)#取2位小数
print(t8)

numpy-创建/修改数组_第1张图片
numpy-创建/修改数组_第2张图片

数组的形状

numpy-创建/修改数组_第3张图片
numpy-创建/修改数组_第4张图片
shape从后往前,后面的(3,2)相同//只要行上的数据一样//任意一维(行或列)相同,可以计算。
不能计算例子:
numpy-创建/修改数组_第5张图片

numpy数据的读入

import numpy as np

us_file_path = "F:/python/课件/数据库  21-数据分析资料/数据分析资料/day03/code/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)#unpack转置
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t1)
print(t2)

numpy-创建/修改数组_第6张图片
numpy-创建/修改数组_第7张图片
numpy-创建/修改数组_第8张图片

numpy数据的转置

numpy-创建/修改数组_第9张图片
numpy-创建/修改数组_第10张图片

numpy切片和索引取值

numpy-创建/修改数组_第11张图片

import numpy as np

us_file_path = "F:/python/课件/数据库  21-数据分析资料/数据分析资料/day03/code/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)#unpack转置
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
# print(t1)
print(t2)

print('*'*100)
# 取行
print(t2[0])#2表示取的第n+1行
#取连续的多行
print(t2[2:])
#取不连续的多行
print(t2[[2,8,10]])

##通过方法
print(t2[1,:])#逗号前面放行(n+行),后面放列
print(t2[2:,:])#逗号前面的冒号表示后面的每行都要,后面的冒号表示每列都要
print(t2[[2,4,3],:])#表示取不连续的多行
#取列
print(t2[:,0])#取第一列(n+1)
print(t2[:,2:])#取连续的多列
print(t2[:,[0,2]])#取不连续的多列

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

b=t2[2:4,1:4]#取得是行和列交叉点的值
print(b)
#取多个不相邻的点
c=t2[[0,2,2],[0,1,3]]#表示取索引(0,0),(2,1)位置的值;里面的逗号表示数字是索引值,需要+1,右边的值也直接+1;冒号表示取值的范围,也是索引+1,但右边的值取不到。
print(c)

numpy中数值的修改

numpy-创建/修改数组_第12张图片
numpy-创建/修改数组_第13张图片
numpy-创建/修改数组_第14张图片

数据的修改和替换

numpy-创建/修改数组_第15张图片

#数据的修改和替换
t2=np.arange(1,31).reshape(3,10)#创建1-20的数字...,3行10列
print(t2)
print(type(t2))
a_array=np.where(t2<=3,0,10)
print(a_array)
t2=t2.astype(float)#astype将数据类型转化为浮点型
t2[1,2]=np.nan#2行3列处
print(t2)

numpy-创建/修改数组_第16张图片
numpy-创建/修改数组_第17张图片

行列上的计算

numpy-创建/修改数组_第18张图片
numpy-创建/修改数组_第19张图片
numpy-创建/修改数组_第20张图片
numpy-创建/修改数组_第21张图片

numpy中填充nan------

import numpy as np
t1=np.arange(12).reshape(3,4).astype('float')#生成3行,4列的数组
print(t1)
print("*"*100)
t1[1,2:]=np.nan#转换成float后才可以直接替换成nan,将2行,3列后面的数替换成nan
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)#将nan统计为‘非0’并计数
        if nan_num!=0: #不为0,说明当前的这一列中有nan
            temp_not_nan_col = temp_col[temp_col == temp_col]  # 当前一列不为nan的array
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()# 选中当前为nan的位置,把值赋值为不为nan的均值
    return t1

if  __name__=='__main__':
    t1=np.arange(12).reshape(3,4).astype('float')
    t1[1,2:]=np.nan
    print(t1)
    print("之前")
    t1=fill_ndarray(t1)#调用方法
    print(t1)

练习

import numpy as np
from matplotlib import  pyplot as plt

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)
t_us = np.loadtxt(us_file_path,delimiter=",",dtype="int")

#取评论的数据
t_us_comments = t_us[:,-1]#表示最后1列

#选择比5000小的数据
t_us_comments = t_us_comments[t_us_comments<=5000]

print(t_us_comments.max(),t_us_comments.min())

d = 50

bin_nums = (t_us_comments.max()-t_us_comments.min())//d

#绘图
plt.figure(figsize=(20,8),dpi=80)

plt.hist(t_us_comments,bin_nums)


plt.show()

##英国喜欢数和评论数之间的关系
t_uk = np.loadtxt(uk_file_path,delimiter=",",dtype="int")
#选择喜欢数比50万小的
t_uk=t_uk[t_uk[:,1]<=500000]

t_uk_comments=t_uk[:,-1]#倒数第一列
t_uk_like=t_uk[:,1]#第二列

plt.figure(figsize=(20,8),dpi=80)
plt.scatter(t_uk_like,t_uk_comments)#x与y之间的散点图
plt.show()

数据的拼接

numpy-创建/修改数组_第22张图片

数组行列的交换

numpy-创建/修改数组_第23张图片

import numpy as np

us_data = "./youtube_video_data/US_video_data_numbers.csv"
uk_data = "./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、1的数据
zeros_data = np.zeros((us_data.shape[0],1)).astype(int)#转化为整型
ones_data = np.ones((uk_data.shape[0],1)).astype(int)#生成全为1的数组,形状是:全为行、1列

#分别添加一列全为0,1的数组
us_data = np.hstack((us_data,zeros_data))
uk_data = np.hstack((uk_data,ones_data))


# 竖直拼接两组数据(两个数组纵向堆起)
final_data = np.vstack((us_data,uk_data))
print(final_data)

获取行的最大值、最小值

numpy-创建/修改数组_第24张图片

生成随机数

numpy-创建/修改数组_第25张图片

你可能感兴趣的