Python 数据分析3:NumPy

NumPy是一个在Python中做科学计算的基础库,重在数值计算。

在Python中使用NumPy

import numpy as np

1. 使用NumPy生成数组常用方法

1. array(列表)
np.array(list)

2. arange 类似range 可以有步长
np.arange(start, end, step)

3. np.random 生成随机数,默认为0到1 m行n列 
np.random.random((m, n))
np.random.randint(start, end, size=(m, n))

numpy数组的toString方法
arr.astype("S")

#%%

import numpy as np

#%%

#1. array(列表)
a = np.array([1, 2, 3, 4])
print(a)

#%%

#2. arange 类似range 可以有步长
b = np.arange(10, 20)
print(b)

#%%

#3. np.random 0~1 m行n列 
a1 = np.random.random((2, 3))
print(a1)
#0~10整数 3行3列
a2 = np.random.randint(0, 10, size=(3, 3))
print(a2)

#%%

b = np.array([1, 2, 3, 4, 5], dtype=np.int16)  #'i2'
print(b)
print(b.dtype)

#%%

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


d = np.array([Person('name1', 18), Person('name2', 19)])
print(d[1].name)

#%%

strb = b.astype("S")  #tostring
print(strb)

#%%

2. NumPy创建多维数组

arr.dim 获取维度
arr.shape 获取数组的形状 m行n列(m,n)
arr.reshape((m,n)) #变成m行n列(2维)
a2.reshape(m,) #变成1行m列(1维)
a2.flatten() #变成1维
a21.size #元素个数
print(a21.itemsize) #每个元素占多少字节 int占4个字节

#%%

import numpy as np

#%%

a1 = np.array([1,2,3])
print(a1.ndim) #1
a2 = np.array([[1,2,3],[4,5,6]])
print(a2.ndim) #2
a3 = np.array([
    [
        [1,2,3],[4,5,6]
    ],
    [
        [7,8,9],[10,11,12]
    ]
])
print(a3.ndim)

#%%

print(a1.shape) #1个元素的元组 1维 3个元素
print(a2.shape) # 2维 2行3列

#%%

a21 = a2.reshape((1,6)) #变成1行6列(还是2维)
print(a21)
a21 = a2.reshape(6,) #变成1行6列(1维)
print(a21)
a21 = a2.flatten() #变成1维
print(a21)

#%%

print(a21.size) #元素个数

#%%

print(a21.itemsize) #每个元素占多少字节 int:4

#%%


 3. 数组索引

a1[start:end:step] 切片索引 与list相同
arr>a 返回一个与arr相同形状的数组,大于a的位置为True,否则为False
arr[arr>a]取出大于a的元素,返回一个1维数组
np.where(a>3) #>3数的坐标
np.where(a>3, 9, 10) #>3的数换成9 否则换成10
#%%

import numpy as np

#%%

a = np.random.randint(0,10,size=(6,6))
print(a)

#%%

print(a<5) #相应位置True/False

#%%

print(a[a<5])#<5的数 1个数组

#%%

a[1] = 0
print(a)

#%%

a[1] = np.array([1,2,3,4,5,6])
print(a)

#%%

a[a<3] = 1
print(a)

#%%

result = np.where(a>3) #>3数的坐标
print(result)

#%%

result = np.where(a>3, 9, 10) #>3的数换成9 否则换成10
print(result)

#%%

4. 数组形状操作

np.vstack([a1,a2]) #竖直拼接
np.hstack([a1,a2]) #水平拼接
np.vsplit(a1,[2,4]) #竖向切割 下标2 4的位置
#hsplit横向
a1.T #转置
a1.dot(a6) 矩阵乘法
data.sum()求和

data.mean()求平均数

关于axis

对于二维数组而言,如果axis=0,则沿着纵轴进行操作。如果axis=1,则沿着横轴进行操作。

对于更广泛的数组,如果axis=i ,则numpy沿着第i个下标变化的方向进行操作。

#%%

import numpy as np

#%%

a1 = np.random.randint(0,10,size=(6,6))
a2 = np.random.randint(0,10,size=(6,6))
print(a1)
print(a2)

#%%

a3 = np.vstack([a1,a2]) #竖直拼接
a3

#%%

a4 = np.hstack([a1,a2]) #水平拼接
a4

#%%

a5 = np.vsplit(a1,[2,4]) #竖向切割 下标2 4的位置
a5

#%%

a5[2][1][3]

#%%

#hsplit横向

a6 = a1.T #转置
a6

#%%

a1.dot(a6)

#%%

#%%

data.sum()

#%%

data.sum(axis=1)/data[0].size  #除了delete用axis=1表示列以外,其他的大部分函数都是行

#%%

mean = data.mean()
mean

#%%



 5. 深浅拷贝方法

c = a.view() #浅拷贝
d = a.copy() #深拷贝

6.  csv文件操作

np.savetxt("14file.csv",a,fmt="%d",delimiter=",",
          header="line1, line2")

delimiter:csv文件一般以逗号分隔数据
b= np.loadtxt("14file.csv",dtype=np.int,skiprows=1,delimiter=",")

skiprows=1:不读取第一行标题数据

 csv方法

import csv
csv.reader(fp) 读文件
csv.DictReader(fp)以字典方式读文件
csv.writer(fp)写文件
writer.writerow(headers) 写一行数据 
writeheader() 写一行标题
writer.writerows(values) 写多行数据

#%%

import csv

#%%

#以列表方式获取
with open('14file.csv','r')as fp:
    reader = csv.reader(fp)
    next(reader) #往下移1行 去掉标题
    for x in reader:
        print(x)

#%%

#以字典方式获取
with open('14file.csv','r') as fp:
    #不包括第一行
    reader = csv.DictReader(fp)
    for x in reader:
        print(x)

#%%

headers=['name','age','classroom']
values=[
    ('name1',18,'class1'),
    ('name2',18,'class1'),
    ('name3',18,'class2')
]
with open('16file.csv','w',newline='') as fp:
    writer = csv.writer(fp)
    writer.writerow(headers)
    writer.writerows(values)

#%%

headers=['name','age','classroom']
values=[
    {"name": 'name1',"age": 18,"classroom":222},
    {"name": 'name2',"age": 18,"classroom":223},
]
with open('16file2.csv','w',newline='') as fp:
    writer = csv.DictWriter(fp,headers)
    writer.writeheader()
    writer.writerows(values)

#%%

 7. nan

np.NAN nan常数
np.isnan(data) 查看data中各项是不是nan 返回bool数组

#%%

import numpy as np

#%%

data = np.random.randint(0,10,size=(3,5))
data

#%%

data = data.astype(float)
data[0][1] = np.NAN
data

#%%

data[~np.isnan(data)] #一维数组 非NAN

#%%

lines = np.where(np.isnan(data))[0] #获取哪些行有NAN 0=行  1=列
data1 = np.delete(data,0,axis=0) #删除有NAN的行
data1

#%%

data[np.isnan(data)] = 0
data

 8. random

np.random.seed(1) #种子
np.random.rand()生成随机数
np.random.randn(20) #正态分布
np.random.randint(start,end,size=(20)) #随机选正整数
np.random.choice(data,4) #从data中随机选4个数
np.random.choice(data,size=(2,2)) #从data中随机2行2列
np.random.shuffle(data) #打乱顺序
#%%

import numpy as np

#%%

np.random.seed(1) #种子
print(np.random.rand())
print(np.random.rand())

#%%

print(np.random.randn(20)) #正态分布

#%%

data = np.random.randint(1,10,size=(20))
data

#%%

choice = np.random.choice(data,4) #随机选4个数
choice

#%%

choice = np.random.choice(data,size=(2,2)) #随机2行2列
choice

#%%

np.random.shuffle(data) #打乱顺序
data

#%%

 9. 常用函数

#%%

import numpy as np

#%%

#一元函数
abs sqrt square exp log sign变号 ceil floor round四舍五入 modf将整数和小数分隔开形成2个数组
isnan isinf cos sin tan arcsin arccos arctan

#%%

#二元函数
add subtract nultiply divide floor_divide取整 mod greater greater_equal less euqal not_equal logical_and& logical_or|

#%%

#聚合函数
np.nanXXX 忽略NAN数据
np.sum prod求积 mean std标准差 var方差 min max argmin最小值索引 argmax median中位数
np.prod(a,axis=0)

#%%

bool判断函数
np.any 验证所任何一个元素是否为真           np.all 验证所有元素是否为真
if(np.any(a==0)) a为数组 有一个为0则true

#%%

#排序
np.sort(a) -np.sort(-a)
np.take(a,indexes) 取指定下标的值

#%%

#其他函数
#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hinomoto Oniko

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值