当前位置: 首页 > news >正文

Python数据分析及相关库(一)

目录

一、多维数组库numpy

1、特点

2、相关函数

3、创建数组

4、numpy常用属性及函数

5、numpy数组的元素增删改查

①numpy的增加

②numpy的删除

③numpy的查找

6、numpy数组的数学运算

7、numpy数组的切片

二、pandas数据分析库

1、认识pandas

2、Series类

3、DataFrame的构造访问

4、DataFrame的切片


数据分析我们主要涉及到numpy和pandas。

一、多维数组库numpy

numpy是Python中用于科学计算的库,它提供了强大的多维数组的对象,以及大量用于操作这些数组的函数(Python数组是存储同类型数据的高效结构)

1、特点

它具有以下特点:

①多维数组库,创建多为数组很方便,可以代替多维列表

②速度比多维列表快很多

③支持向量和矩阵的各种数学运算

④所有的元素类型必须相同

2、相关函数

函数功能
array(x)根据列表或元组x创建数组
arange(x,y,i)创建一堆数组,元素等价于range(x,y,i)
linespace(x,y,n)创建一个由区间[x,y]的n-1等分点构成的一维数组,包含x和y
random.randint(...)创建一个元素为随机整数的数组
zeros(n)创建一个元素全为0.0的长度为m的数组
ones(n)创建一个元素全为1.0的长度为n的数组(后面可加dtype=int,即均为整数)

3、创建数组

我们可以根据上面的函数创建几个数组的示例:

import numpy as np

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

b = np.arange(1,9,2)
print(b)

c = np.linspace(1,10,4)
print(c)

d = np.random.randint(10,20,[2,3])      #输出一些从10到20(包含端点)的随机数,构成生成一个两行三列的数组
print(d)

输出:

从这些输出中,我们就能看见这些数组和一些列表之类的数据类型的不同

4、numpy常用属性及函数

属性或函数含义及功能
dtype数组元素的类型
ndim数组是几维的
shape数组每一维的长度
size数组元素的个数
argwhere(...)查找元素
tolist()转换为list
min()求最小元素
max()求最大元素
reshape()改变数组的形状
flatten()转换为一维的数组

下面我们来把这些函数结合到代码中:

import numpy as np
a = np.array([i for i in range(12)])    #我们先用列表生成式生成了一个从0到11的数组
print(a)
print(a.dtype)  #输出a的类型
print("\n")

b = a.reshape(3,4)      #转化为三行四列的数组
print(b)
print(b.shape)
print("\n")

print(b.size)       #注意区分这两个size是指元素的个数,而此时的len就是说这个数组有几行
print(len(b))
print("\n")

print(a.ndim)   #看数组的维度,一维就是只有一行或者一列,二维就是有行有列,三维就是还有深度
print(b.ndim)
print("\n")

listone = b.tolist()    #转化为列表
print(listone)
print("\n")

c = b.flatten()     #拉直,就是变成一维的
print(c)

输出:

5、numpy数组的元素增删改查

在Python的numpy数组中,当我们生成了这个数组,这个数组的元素个数,形状是不能进行改变的,而上面和一会下面提到的增删元素的函数都是生成了一个新的数组

函数:

函数功能
append(x,y)若y是数组,列表,元组之一,就将y的元素添加进数组x得到新数组,否则就将y本身添加进数组x得到新的数组
concatenate(...)拼接多个列表
delete(...)删除数组元素得到新数组

我们把这些函数应用到代码中:

①numpy的增加

import numpy as np

a = np.array((1,2,3))
b = np.append(a , 9)
print(b)
print(a)
print("\n")

c = np.append(b, [80 , 90])     #这些函数都只会创建一个新的数组,输出旧的依旧不变
print(c)
print(b)
print("\n")

d = np.concatenate((c , [4,5,6] , [7,8,9]))     #concatenate函数的值必须是一个元组,元组内部包含需要拼接到一起的各个数据
print(d)

输出:

②numpy的删除

代码:

import numpy as np

a = np.array((1,2,3,4,5))
b = np.delete(a , 1)
print(b)
print(a)
print("\n")

c = np.array([[1,2,3] , [4,5,6] , [7,8,9]])
d = np.delete(c , 2 , axis=0)   #axis就是用来知名具体的行或轴,0就是行,1就是列,代码中的就是分别指删除第二行和删除第二列
e = np.delete(c , 2 , axis=1)   
print(d)
print(e)

输出:

③numpy的查找

在numpy中,我们可以通过元素的数值来查找其对应的下标,我们也可以简单的判断某个元素是否在数组内部:

代码:

import numpy as np

a = np.array((1,2,3,4,5,2,8,9))

posone = np.argwhere(a == 2)
print(posone)

print(2 in a)

输出:

我们也可以选出符合某个范围的数值:

import numpy as np

a = np.array((1,2,3,4,5,2,8,9))

b = a[a > 5]
print(b)

a[a < 5] = 0    #虽然不能改变数组的长度,形状,但是可以更改元素的数值!
print(a)

输出:

6、numpy数组的数学运算

numpy数组拥有强大的数学运算,它身为一个数组居然能直接和数字进行运算!(向量化运算,简直不要太强)

import numpy as np

a = np.array((1,2,3,4,5))

b = a + 1   #数组与数字
print(b)

c = a * b   #数组与数组
print(c)

输出:

7、numpy数组的切片

numpy身为一个数组,当然可以进行切片操作了,但是它有一个特点,在我们前面的列表,元组中,一个切片就相当于是一个新的元素了,但是在numpy数组中,他的切片是一个“视图”,也就是说这个切片是原数组的一部分,而不是一部分的拷贝(即我们改变了切片,原数组也会改)

但如果我们就是想要一个独立的切片,我们可以使用copy函数

import numpy as np

a = np.array((1,2,3,4,5,6,7,8,9))

b = a[1:6]
print(b)

c = np.copy(a[1:6]) 
print(c)

b[1] = 999
print(a)
print(c)

我们在上面的代码中用b直接截取了一部分的切片,而我们的c则是这个切片的拷贝

当我们改变了这个切片b时,身为原数组的a受到了影响,但是我们的拷贝c却无变化

二、pandas数据分析库

1、认识pandas

pandas的核心功能是在二维表格上进行各种操作,如增删,修改,求一列数据的和,差,方差中位数,平均数等

它需要有numpy的支持

如果把pandas与openpyxl等库结合,还可以读写excel文档

而在pandas中最重要的类就是DataFrame,表示二维表格

(这是一个第三方库,需要pip下载)

2、Series类

Series类是一个一维表格,每个元素带有标签,且含有下标,兼具列表和字典的访问形式

我们现在就创建一个一维表格,并对他进行一些基础操作:​​​​​

import pandas as pd

s = pd.Series(data = [100 , 110 , 120] , index = ["语文" , "数学" , "英语"])

for i in s :
    print(i , end = "")

print("\n")

print(s[1])
print(s["数学"])
print("\n")

s["音乐"] = 99
s.pop("语文")
print(s)

看看输出:

以及一些计算和具体的查找:

import pandas as pd

s = pd.Series(data = [100 , 110 , 120] , index = ["语文" , "数学" , "英语"])

print(s.sum() , s.min() , s.max() , s.mean() , s.median())
#输出总和,最小值,最大值,平均值,中位数

print(s.idxmax() , s.argmax())
#输出最大值的元素以及下标

输出:

3、DataFrame的构造访问

DataFrame是带有行列标签的二维表格,每一列都是一个Series

我们先试着创建一个简单的二维表格:

import pandas as pd

pd.set_option("display.unicode.east_asian_width" , True)    #这一行的作用是防止中文字符的宽度导致表格显示错误

scores = [['男',90,100,110] , ['男',120,119,140] , ['女',120,110,120]]
names = ["Ken" , "Sue" , "Wen"]
courses = ["性别" , "语文" , "数学" , "英语"]

df = pd.DataFrame(data = scores , index = names , columns = courses)    #先用DataFrame创建一个函数,里面分别是二维表格的数据,行标签,列标签
print(df)

看看输出:

二维表格的访问十分灵活,我们可以用一些函数来访问二维表格的各种数据或标签:

import pandas as pd

pd.set_option("display.unicode.east_asian_width" , True)    #这一行的作用是防止中文字符的宽度导致表格显示错误

scores = [['男',90,100,110] , ['男',120,119,140] , ['女',120,110,120]]
names = ["Ken" , "Sue" , "Wen"]
courses = ["性别" , "语文" , "数学" , "英语"]

df = pd.DataFrame(data = scores , index = names , columns = courses)    #先用DataFrame创建一个函数,里面分别是二维表格的数据,行标签,列标签

#————————————————————————以上是创建了一个二维表格————————————————————————

print(df.values[0][1])      #求数据中第0行第1列

print(type(df.values))      #返回表格的数据类型

print(list(df.index))       #以列表的形式返回行标签

print(list(df.columns))      #以列表的形式返回列标签

print(df.index[2] , df.columns[2])      #定位到列标签和行标签

print(df["语文"])     #输出语文标签所包含的数据

看看输出:

4、DataFrame的切片

在DataFrame中,我们可以用下标做切片,也可以用标签做切片

在DataFrame中,它的切片也是一个视图!

二维列表就像一个平面,我们可以切一个条(行或列),也可以切一个小面(行列均包含)

import pandas as pd

pd.set_option("display.unicode.east_asian_width" , True)    #这一行的作用是防止中文字符的宽度导致表格显示错误

scores = [['男',90,100,110] , ['男',120,119,140] , ['女',120,110,120]]
names = ["Ken" , "Sue" , "Wen"]
courses = ["性别" , "语文" , "数学" , "英语"]

df = pd.DataFrame(data = scores , index = names , columns = courses)    #先用DataFrame创建一个函数,里面分别是二维表格的数据,行标签,列标签

#————————————————————————以上是创建了一个二维表格————————————————————————

df2 = df.iloc[0:2]
df3 = df.loc["Ken":"Sue"]   #①iloc是用于下标索引,loc是基于标签索引    ②注意一点:用下标切片是不包含结束端的,而用标签索引是包含的
#上面两个等价!
print(df2)
print(df3)
print("——————————————————————————————————————————————————————————")

df4 = df.iloc[: , 0:3]      #前面的冒号没写默认全选
df5 = df.loc[: , "性别":"数学"]
print(df4)
print(df5)
print("——————————————————————————————————————————————————————————")

df6 = df.iloc[:2 , [0,2]]   #也可以这样表示,里面有那个数字,就单只哪行或列(不是范围)(里面是逗号)
df7 = df.loc[:"Sue" , ["性别" , "数学"]]
print(df6)
print(df7)

输出:

以上就是Python数据分析及相关库(一)的相关内容:)

http://www.dtcms.com/a/107063.html

相关文章:

  • 在Qt中直接在构建目录下直接运行.exe文件报错问题分析
  • antvX6自定义 HTML 节点创建与更新教程
  • 使用Leaflet对的SpringBoot天地图路径规划可视化实践-以黄花机场到橘子洲景区为例
  • 爬虫【Scrapy-redis分布式爬虫】
  • SQL 转 PHP Eloquent、Doctrine ORM, 支持多数据库
  • [python] 正则表达式
  • Enovia许可类型及其区别
  • 蓝桥杯 web 知识点集合
  • ngx_sprintf
  • Nginx 核心配置详解与性能优化最佳实践
  • 栈 —— 数据结构基础刷题路程
  • Linux: 进程信号初识
  • 批量提取 PDF 文档中指定页为新的 PDF 文档
  • 【结肠AI分割论文合集1(2021~2023年份)】A survey1
  • 深入探索Redisson:用法全解析及在微服务中的关键应用
  • UCOS和RTOS的区别
  • 算法:双指针法--计算两数之和
  • 数据驱动的智能BMS革新:机器学习赋能电池健康预测与安全协同优化
  • 重新安装VMware tools为灰色无法点击问题解决|读取电脑文件的共享文件夹方法
  • 蓝桥杯刷题
  • 4月2号.
  • 代码随想录C++算法训练,二叉树(day18)
  • 辛格迪客户案例 | 盛大康成GMP质量合规数字化(QMS)项目
  • ros2--urdf--IMU
  • uperMap GIS基础产品FAQ集锦(20250402)
  • 「2025最新版React+Ant Design+Router+TailwindCss全栈攻略:从零到实战,打造高颜值企业级应用
  • [ 3分钟算法 ] | 递归搜索题目 : 合并两个有序链表(递归版)
  • C++虚继承及其它特性
  • 智谱发布AI Agent“AutoGLM沉思”,开启AI“边想边干”新时代
  • k8s之Ingress讲解