Python 数据分析之 Numpy (二)
作者:小蜗牛爱学习
来源:https://blog.csdn.net/qq_42755939/article/details/107032142
一、Numpy读取文件
loadtxt()方法
numpy.loadtxt(fname, dtype=, comments=’#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
参数 | 作用 |
---|---|
fname | 被读取的文件名(文件的相对地址或者绝对地址) |
dtype | 指定读取后数据的数据类型 |
comments | 跳过文件中指定开头的行(即不读取),比如comments=’#'表示不读取以#开头的数据 |
delimiter | 指定读取文件中数据的分割符 |
converters | 对读取的数据进行预处理 |
skiprows | 选择跳过的行数 |
usecols | 指定需要读取的列 |
unpack | 选择是否将数据进行向量输出,相当于将源数据转置输出 |
encoding | 对读取的文件进行预编码 |
import numpy as np#读取文件loadtxt()方法
GB_vido_path = "GB_video_data_numbers.csv"
US_vido_path = "US_video_data_numbers.csv"
t1 = np.loadtxt(GB_vido_path,dtype = "i8", delimiter=",")
t2 = np.loadtxt(US_vido_path,dtype="i8", delimiter=",")print(t1)
print("*"*100)
print(t2)
二、数组转置的三种方法
方法一:使用属性T
方法二:使用方法transpose()
方法三:使用方法swapaxes()
arr01 = np.arange(2,8).reshape(2,3)
print("arr01:",arr01) #arr01: [[2 3 4] [5 6 7]]
#方法一:使用属性T
arr02 = arr01.T
print("arr02:",arr02) #arr02: [[2 5] [3 6] [4 7]]#方法二:使用方法transpose()
arr03 = arr01.transpose() #arr03: [[2 5] [3 6] [4 7]]
print("arr03:",arr03)#方法三:使用方法
arr04 = arr01.swapaxes(1,0)
print("arr04:",arr04) #arr03: [[2 5] [3 6] [4 7]]
三、Numpy的索引与切片
#取数组中的行
t = np.arange(1,73).reshape(8,9)
print(t)
print("*"*100)#取单值
t0 = t[2,3]
print("t0",t0)#取多个值
print(t[[1,3],[5,6]])#取一行
t1 = t[2] #取第三行
print("t1:",t1)#取连续的多行
t2 = t[2:5]
print("t2",t2) #取第三行到第五行#取不连续的多行
t3 = t[[2,4,5]]
print("t3:",t3)#取数组中的列
#取某一列
t4 = t[:,2] #取第三列
print("t4:",t4)#取连续的多列
t5 = t[:,2:5] #取第三到第五列
print("t5:",t5)t6 = t[:,[1,3,7]] #取不连续的多列
print("t6:",t6)#取连续的多行和多列
t7 = t[2:4,4:6]
print("t7:",t7)
四、修改numpy的值与bool索引
1、修改值
n1 = np.arange(1,64).reshape(7,9)
n1[:,2:5] = 0
print("n1:",n1)#将第三列到第五列的值改为0n2 = np.arange(1,64).reshape(7,9)
n2[n2>40] =40
print("n2:",n2) #将大于40的修改为40n3 = np.arange(1,64).reshape(7,9)
print(n3>40) #numpy的bool索引
2、Numpy中的三元运算
where()方法
r = np.arange(54).reshape(6,9)
print(np.where(r>30,30,0))#将r中大于30的修改30,小于30的修改为0
3、numpy的clip()方法
arr = np.arange(1,29).reshape(4,7)
arr = arr.astype("float64")
arr[3:6,3:] = np.nan
print("arr:",arr) #arr: [[ 1. 2. 3. 4. 5. 6. 7.] [ 8. 9. 10. 11. 12. 13. 14.] [15. 16. 17. 18. 19. 20. 21.] [22. 23. 24. nan nan nan nan]]arr1 = arr.clip(5,15) #将arr1中小于5的修改为5,大于15的修改为15,但是不会修改nan值
print("arr1:",arr1) #arr1: [[ 5. 5. 5. 5. 5. 6. 7.] [ 8. 9. 10. 11. 12. 13. 14.] [15. 15. 15. 15. 15. 15. 15.] [15. 15. 15. nan nan nan nan]]
五、Numpy中的nan和inf
1、什么是nan?
nan(NAN,Nan):not a number 表示不是一个数字
2、numpy中会nan是如何产生的?
当我们读取本地的文件为float的时候,如果有缺失,就会出现nan,当做了一个不合适的计算的时候(比如无穷大减去无穷大)
3、inf
inf(-inf,inf) : infinity, +inf表示正无穷,-inf表示负无穷
注意1:什么时候会出现inf包括(-inf,+inf)?
如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)
注意2:那么如何指定一个nan或者inf呢?
注意3:他们的type类型
a = np.nan
b = np.inf
print(type(a),type(b)) #<class 'float'> <class 'float'>
4、numpy中的nan的注意点
1、两个nan不相等
print("两个nan是否相等:",np.nan == np.nan) #两个nan是否相等: False
print(np.nan != np.nan) #True
2、判断一个数组里面有几个nan值
count_nonzero():判断数组里面0或者True的个数
arr1 = np.array([1., 2., 3., 4., np.nan, 5., np.nan])
print(arr1)
print(arr1 != arr1) #[False False False False True False True]
print(np.count_nonzero(arr1 != arr1)) #2
3、将nan值转化为0
np.isnan(arr)判断数组中nan值
arr2 = arr1
print(np.isnan(arr2)) #[False False False False True False True]
arr1[np.isnan(arr2)] = 0
print(arr2) #[1. 2. 3. 4. 0. 5. 0.]
4、nan与任何值计算都为nan
数据分析中nan值的处理
那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?
比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行
那如何计算一组数据的中值或者是均值?
六、Numpy中常用统计函数
1、求和:t.sum(axis=None)
2、均值:t.mean(a,axis=None) 受离群点的影响较大
3、中值:np.median(t,axis=None)
4、最大值:t.max(axis=None)
5、最小值:t.min(axis=None)
6、极值:np.ptp(t,axis=None) 即最大值和最小值只差
7、标准差:t.std(axis=None)
注意:默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果
七、数据清洗–Numpy如何处理缺失值填充均值
nan = np.nan
t = np.array([[ nan, 1., nan, 7., 4., 18.],[ 9., 2., nan, 9., 10., 11.],[ nan, 13., 14., nan, 16., 88.],[ 18., nan, 51., 20., nan, 63.]])def fill_nan_by_column_mean(t):"""将列的平均值替换nan"""for i in range(t.shape[1]):#获取当列的nan值的个数nan_num = np.count_nonzero(t[:,1][t[:,i] != t[:,i]]) if nan_num > 0:now_col = t[:,i]#求当前列非nan值的和now_col_num = now_col[t[:,i] == t[:,i]].sum() #求平均值avg = round((now_col_num / (now_col.shape[0] - nan_num)), 2)#将平均值替代nannow_col[np.isnan(now_col)] = avgt[:,i] = now_col return tt = fill_nan_by_column_mean(t)
print(t) #结果如下:
[
[13.5 1. 32.5 7. 4. 18. ]
[ 9. 2. 32.5 9. 10. 11. ][13.5 13. 14. 12. 16. 88. ][18. 5.33 51. 20. 10. 63. ]]
推荐阅读:
- 我精心整理的 136 页 Excel 数据透视表 PDF 文件!【附获取方式】
- 100天从 Python 小白到大神的学习资源,都在这了。
- 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏…
- 我花了五个小时的时间,将全部文章详细整理出来了,千万不要错过!
关注微信公众号『杰哥的IT之旅』,后台回复“1024”查看更多内容,回复“微信”添加我微信。
Python 数据分析之 Numpy (二)相关推荐
- python数据分析入门【二】 --- 数据处理
python数据分析入门[二] - 数据处理 上一章内容python数据分析入门[一] - DataFrame & Series 下一章内容python数据分析入门[三] - 数据分析 文章目 ...
- Python 数据分析之Numpy
Python 数据分析之Numpy Python有着大量功能强大的第三方库.这些第三方库可以大大地扩充Python的功能,我们在实际使用中往往也离不开这些第三方库. NumPy是Python的一种开源 ...
- Python数据分析训练营——Python数据分析之Numpy
文章目录 Python数据分析之Numpy 1.Numpy的数组对象及其索引 数组上的数学操作 产生数组 数组属性 索引和切片 多维数组及其属性 多维数组索引 多维数组切片 切片是引用 花式索引 一维 ...
- Python数据分析 3.numpy数据科学库
Python数据分析 3.numpy基础库 1.数组的创建 import numpy as npt1 = np.array([1,2,3,]) print(t1) print(type(t1))t2 ...
- Python数据分析之Numpy,Pandas,Matplotlib Pyplot
文章目录 一.Python数据分析之Numpy 0.数组的引入 1.创建数组 2.数组的属性 3.数组的基本操作 3.1 索引 3.2 切片 3.3花式索引 3.4 "不完全"索引 ...
- Python数据分析笔记——Numpy、Pandas库
Python数据分析--Numpy.Pandas库 总第48篇 ▼ 利用Python进行数据分析中有两个重要的库是Numpy和Pandas,本章将围绕这两个库进行展开介绍. Numpy库 Numpy最 ...
- python 数据分析5 NumPy 基础:数组和矢量计算
系列文章:Python 数据分析 文章目录 五.NumPy 基础:数组和矢量计算 1.n维数组对象 ndarray 创建 dtype 数组运算 基本的索引和切片 一维数组 二维数组 布尔型索引 花式索 ...
- Python数据分析之numpy(保姆级教程)
一.前言 在数据处理中,我们肯定离不开矩阵计算.那么在Python中如何操作矩阵呢? 那就有请今天的主角--numpy 二.前提准备 需要在你使用的Python解释器上,安装numpy包. (1)Wi ...
- Python数据分析-数据可视化(二)
欢迎大家访问个人博客:https://jmxgodlz.xyz 文章目录 前言 Matplotlib 折线图格式调整 标签 线条颜色 线条形状 折点样式 线条透明度 前言 看到有些论文插图十分简洁美观 ...
最新文章
- docker安装chirpstack_docker-compose快速部署ChirpStack
- java database connect
- tableView相关
- MySQL字符集的一个坑
- python用途与前景-Python 就业方面的选择与应用分析
- 前端学习(2443):反馈
- 《C++ Primer 5th》笔记(11 / 19):关联容器
- RBSP、SODB、EBSP三者的区别和联系 SPS: sequence parameter sets
- shell 脚本比较字符串相等_LINUX快速入门第十六章:Shell 流程控制
- DirectX 3D 设备丢失(lost device)的处理
- 【Android Developers Training】 20. 创建一个Fragment
- 华为融合位置服务器,融合服务器
- java-idea-3批处理文件运行jar包
- CDH 5.13.0安装方法
- HCNA培训常见问题001-HCNA AI学习什么内容?
- 【论文阅读】【因果关系】
- Bundle Adjustment简述
- “人工智能”初创公司所面临的问题
- 云更新无盘服务器缓存,云更新无盘服务器缓存设置
- c# windows服务程序
热门文章
- Python弄懂基础点---print函数格式化输出的几种方式
- 2021-06-17Leetcode84.柱状图中最大的矩形 Leetcode.85最大矩形
- [python]有限状态机(FSM)简单实现
- TDW 2019 | 微众银行AI能力融入系统设计 打破医疗信息化困境
- java运行内存溢出指什么内存溢出_项目正常启动,但是在访问页面的时候java报内存溢出错误。。小感悟...
- 走进Evasi0n,越狱黑客如何拿到iOS权限
- msvcr100.dll丢失的解决方法 win10,如何修复丢失问题
- excel for mac实用小技巧之两列姓名核对
- PHP的create方法,Thinkphp中Create方法深入探究
- html基础-表格篇