人工智能研究生前置知识—扩展程序库Pandas

人工智能研究生前置知识—扩展程序库Pandas

在这里插入图片描述

pandas简介

Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据)。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

pandas的官网:https://pandas.pydata.org/

  • Series: 类似于一维数组或列表,是由一组数据以及与之相关的数据标签(索引)构成。Series 可以看作是 DataFrame 中的一列,也可以是单独存在的一维数据结构。

  • DataFrame: 类似于一个二维表格,它是 Pandas 中最重要的数据结构。DataFrame 可以看作是由多个 Series 按列排列构成的表格,它既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作。

在这里插入图片描述
Pandas 提供了丰富的功能,包括:

  • 数据清洗:处理缺失数据、重复数据等。
  • 数据转换:改变数据的形状、结构或格式。
  • 数据分析:进行统计分析、聚合、分组等。
  • 数据可视化:通过整合 Matplotlib 和 Seaborn 等库,可以进行数据可视化。

Pandas常用数据结构

Series

Series 特点:
索引: 每个 Series 都有一个索引,它可以是整数、字符串、日期等类型。如果没有显式指定索引,Pandas 会自动创建一个默认的整数索引。

数据类型: Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串等。

pandas.Series( data, index, dtype, name, copy)

参数说明:

  • data:一组数据(ndarray 类型)。

  • index:数据索引标签,如果不指定,默认从 0 开始。

  • dtype:数据类型,默认会自己判断。

  • name:设置名称。

  • copy:拷贝数据,默认为 False。

import numpy as np
import pandas as pds = pd.Series([1,2,4,5,7,9])
print(s)0    1
1    2
2    4
3    5
4    7
5    9
dtype: int64

输出的数据有索引、数值和数据类型组成

DataFrame

DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。

在这里插入图片描述
DataFrame 构造方法如下:

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

  • data:一组数据(ndarray、series, map, lists, dict 等类型)。

  • index:索引值,或者可以称为行标签。

  • columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。

  • dtype:数据类型。

  • copy:拷贝数据,默认为 False。

  • Pandas DataFrame 是一个二维的数组结构,类似二维数组。

创建简单的实例操作

dates = pd.date_range('20160101',periods=6)
print(dates)
df = pd.DataFrame
(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
print(df)DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04','2016-01-05', '2016-01-06'],dtype='datetime64[ns]', freq='D')a         b         c         d
2016-01-01 -0.580792 -0.054259 -1.328131 -0.031686
2016-01-02 -0.015089 -0.364996  0.682357 -0.145403
2016-01-03  0.343227  1.725339 -1.515164  0.326085
2016-01-04 -0.593643 -0.352377  0.542772 -0.466898
2016-01-05 -2.323654 -0.690758 -0.113209  0.606809
2016-01-06 -1.801662  0.149519 -0.574387 -0.175300
  • 使用ndarray数组进行创建
df1 = pd.DataFrame(np.arange(12).reshape(3,4))
print(df1)0  1   2   3
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
  • 使用字典数据来进行创建
print("------------------")
data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}df3 = pd.DataFrame(data)print (df3)------------------Site  Age
0  Google   10
1  Runoob   12
2    Wiki   13

示例二

df4 = pd.DataFrame({'A':1,'B':pd.Timestamp('20130102'),'C':pd.Series([1.0,2.0,3.0,4.0])})
print(df4)
# 每一列的数据类型
print(df4.dtypes)
# 打印行和列的索引
print(df4.index,df4.columns)A          B    C
0  1 2013-01-02  1.0
1  1 2013-01-02  2.0
2  1 2013-01-02  3.0
3  1 2013-01-02  4.0A             int64
B    datetime64[ns]
C           float64
dtype: objectRangeIndex(start=0, stop=4, step=1) 
Index(['A', 'B', 'C'], dtype='object')

注意可以使用不同数据类型的元素

  • 获取列名 columns = df.columns

  • 获取形状(行数和列数)shape = df.shape

  • 获取索引 index = df.index

  • 获取描述统计信息 stats = df.describe()

pandas选择数据

  • 案例中使用到的数据结构
import numpy as np
import pandas as pd
dates = pd.date_range('20230101',periods=6)
df = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df)A   B   C   D
2023-01-01   0   1   2   3
2023-01-02   4   5   6   7
2023-01-03   8   9  10  11
2023-01-04  12  13  14  15
2023-01-05  16  17  18  19
2023-01-06  20  21  22  23

切片选择

对行进行切片选择

#  行切片选择第一行到第三行
print(df[0:3])
# 等价形式
print(df['2023-01-01':'2023-01-03'])A  B   C   D
2023-01-01  0  1   2   3
2023-01-02  4  5   6   7
2023-01-03  8  9  10  11A  B   C   D
2023-01-01  0  1   2   3
2023-01-02  4  5   6   7
2023-01-03  8  9  10  11

对列进行切片选择

print('===============')
# 对列进行切片选择
print(df['A'],df.A)2023-01-01     0
2023-01-02     4
2023-01-03     8
2023-01-04    12
2023-01-05    16
2023-01-06    20
Freq: D, Name: A, dtype: int32 2023-01-01     0
2023-01-02     4
2023-01-03     8
2023-01-04    12
2023-01-05    16
2023-01-06    20
Freq: D, Name: A, dtype: int32

标签选择

选择指定的行,指定的列,和行列的交叉项

#横向标签
print(df.loc['2023-01-04'])
#纵向的标签进行选择
print(df.loc[:,['A','B']])
print('##############')
# 综合情况下的选择
print(df.loc[['2023-01-02','2023-01-03'],['A','B']])
A    12
B    13
C    14
D    15
Name: 2023-01-04 00:00:00, dtype: int32A   B
2023-01-01   0   1
2023-01-02   4   5
2023-01-03   8   9
2023-01-04  12  13
2023-01-05  16  17
2023-01-06  20  21
##############A  B
2023-01-02  4  5
2023-01-03  8  9

位置选择

使用.iloc进行根据位置来选择元素

print('--------------')
# 选择第三行元素
print(df.iloc[2])
#选择第三列元素
print(df.iloc[:,2])
# 选择第三行第三列的元素
print(df.iloc[2,2])
#与切片结合选择
print(df.iloc[1:3,2:3])--------------
A     8
B     9
C    10
D    11
Name: 2023-01-03 00:00:00, dtype: int32
2023-01-01     2
2023-01-02     6
2023-01-03    10
2023-01-04    14
2023-01-05    18
2023-01-06    22
Freq: D, Name: C, dtype: int32
10C
2023-01-02   6
2023-01-03  10

条件选择

print(df[df.A>8])A   B   C   D
2023-01-04  12  13  14  15
2023-01-05  16  17  18  19
2023-01-06  20  21  22  23

pandas设置值(修改操作)

  • 案例中使用到的数据结构
import numpy as np
import pandas as pd
dates = pd.date_range('20230101',periods=6)
df = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df)A   B   C   D
2023-01-01   0   1   2   3
2023-01-02   4   5   6   7
2023-01-03   8   9  10  11
2023-01-04  12  13  14  15
2023-01-05  16  17  18  19
2023-01-06  20  21  22  23

修改操作即选择操作与赋值操作之间相结合

pandas处理丢失数据(简单数据清洗)

含有丢失数据的数据集合

import numpy as np
import pandas as pd
dates = pd.date_range('20230101',periods=6)
df = pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])df.iloc[0,1] = np.nan
df.iloc[1,2] = np.nan
print(df)A     B     C   D
2023-01-01   0   NaN   2.0   3
2023-01-02   4   5.0   NaN   7
2023-01-03   8   9.0  10.0  11
2023-01-04  12  13.0  14.0  15
2023-01-05  16  17.0  18.0  19
2023-01-06  20  21.0  22.0  23

处理一:丢失数据

# 行筛选丢失
print(df.dropna(axis=0,how='any'))  #how={all,any}其中all所有元素都为空,any任何元素为空、
#列筛选丢失
print(df.dropna(axis=1,how='any'))A     B     C   D
2023-01-03   8   9.0  10.0  11
2023-01-04  12  13.0  14.0  15
2023-01-05  16  17.0  18.0  19
2023-01-06  20  21.0  22.0  23A   D
2023-01-01   0   3
2023-01-02   4   7
2023-01-03   8  11
2023-01-04  12  15
2023-01-05  16  19
2023-01-06  20  23

处理二:默认填充

实例测试默认将空值填充为0,首先要确认判断数据是否会有缺失的情况存在

print(df.isnull())
print('----------------')
# 判断是否存在数据的缺失
print(np.any(df.isnull()))
# 缺失的部分默认填充为0
print(df.fillna(value=0))A      B      C      D
2023-01-01  False   True  False  False
2023-01-02  False  False   True  False
2023-01-03  False  False  False  False
2023-01-04  False  False  False  False
2023-01-05  False  False  False  False
2023-01-06  False  False  False  False
----------------
TrueA     B     C   D
2023-01-01   0   0.0   2.0   3
2023-01-02   4   5.0   0.0   7
2023-01-03   8   9.0  10.0  11
2023-01-04  12  13.0  14.0  15
2023-01-05  16  17.0  18.0  19
2023-01-06  20  21.0  22.0  23

pandas导入导出数据

使用到的csv文件如下所示。

Student ID,name ,age,gender
1100,Kelly,22,Female
1101,Clo,21,Female
1102,Tilly,22,Female
1103,Tony,24,Male
1104,David,20,Male
1105,Catty,22,Female
1106,M,3,Female
1107,N,43,Male
1108,A,13,Male
1109,S,12,Male
1110,David,33,Male
1111,Dw,3,Female
1112,Q,23,Male

读取csv文件

import pandas as pd
data = pd.read_csv('student.csv')
print(data)Student ID  name   age  gender
0         1100  Kelly   22  Female
1         1101    Clo   21  Female
2         1102  Tilly   22  Female
3         1103   Tony   24    Male
4         1104  David   20    Male
5         1105  Catty   22  Female
6         1106      M    3  Female
7         1107      N   43    Male
8         1108      A   13    Male
9         1109      S   12    Male
10        1110  David   33    Male
11        1111     Dw    3  Female
12        1112      Q   23    Male
13        1113      W   21  Female

导出文件(csv)

将读取后的csv文件导出为excel格式的文件
data.to_excel(‘student.xlsx’,index=False)

# 三个字段 name, site, age
nme = ["Google", "Runoob", "Taobao", "Wiki"]
st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
ag = [90, 40, 80, 98]# 字典
dict = {'name': nme, 'site': st, 'age': ag}df = pd.DataFrame(dict)# 保存 dataframe
df.to_csv('site.csv')

在这里插入图片描述

pandas数据合并

按行进行合并操作(axis=0)

使用到的待合并的数据集

import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.ones((3,4))*0,columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1,columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2,columns=['a','b','c','d'])
print(df1)
print(df2)
print(df3)a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0a    b    c    d
0  1.0  1.0  1.0  1.0
1  1.0  1.0  1.0  1.0
2  1.0  1.0  1.0  1.0a    b    c    d
0  2.0  2.0  2.0  2.0
1  2.0  2.0  2.0  2.0
2  2.0  2.0  2.0  2.0
# 使用concat按行来进行合并
res = pd.concat([df1,df2,df3],axis=0,ignore_index=False)
print(res)a    b    c    d
0  0.0  0.0  0.0  0.0
1  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0
0  1.0  1.0  1.0  1.0
1  1.0  1.0  1.0  1.0
2  1.0  1.0  1.0  1.0
0  2.0  2.0  2.0  2.0
1  2.0  2.0  2.0  2.0
2  2.0  2.0  2.0  2.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620187.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BGI | STCellBin:动植物组织细胞分割

简介 STCellbin 利用细胞核染色图像作为桥梁来获取与空间基因表达图谱对齐的细胞膜/壁染色图像。通过采用先进的细胞分割技术,可以获得准确的细胞边界,从而获得更可靠的单细胞空间基因表达谱。此次更新的增强功能为细胞内基因表达的空间组织提供了宝贵的…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题5 第一阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第一阶段试题,第一阶段内容包括:网络平台搭建与设备安全防护。 本次比赛时间为180分钟。 介绍 竞赛阶段…

Web前端 Javascript笔记1

为什么学习 JavaScript? JavaScript 是 web 开发人员必须学习的 3 门语言中的一门: HTML 定义了网页的内容CSS 描述了网页的布局JavaScript 控制了网页的行为 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后,可由所有的现代浏…

ssm050助学贷款+jsp

助学贷款管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本助学贷款管理系统就是在这样的大环境下诞生,其可以帮助管理者在短…

噪音日冷知识:你的耳朵能承受多大的噪音?降噪耳机真的有用吗?

分贝——是对人类能听到的声音大小的一种数值化、可视化的描述。分贝数值越大,表示声音越大。 我们每天都能听到各种各样的声音,但你有关注过声音大小背后的意义吗?4月16日是国际噪音日,值此之际,带你了解下有关“声音…

第十届 蓝桥杯 单片机设计与开发项目 省赛

第十届 蓝桥杯 单片机设计与开发项目 省赛 输入: 频率信号输入模拟电压输入 输出(包含各种显示功能): LED显示SEG显示DAC输出 01 数码管显示问题:数据类型 bit Seg_Disp_Mode;//0-频率显示界面 1-电压显示界面 un…

OpenHarmony南向开发案例:【智能垃圾桶】

样例简介 智能垃圾桶可以通过数字管家应用来监测垃圾桶当前可用容量,提醒主人及时处理垃圾;通过日程管家可以实现和其他智能设备联动。 核心组件位置功能距离传感器置于垃圾桶盖内侧感应垃圾量红外传感器置于垃圾桶前端感应是否有人靠近光敏电阻开发板…

【数据结构】第三节:单链表

前言 本篇要求掌握的C语言基础知识:指针、结构体 目录 前言 单链表 概念 对比链表和顺序表 创建链表 实现单链表 准备工作 打印链表 创建节点并初始化 尾插 二级指针的调用 尾插代码 头插 尾删 头删 查找(返回节点) 在指定位…

Java相关的定时任务

就现在而言,关于定时任务有各种各样的架构:java 定时器类【Timer】,spring定时器类【Scheduled】,quartz分布式定时器类,xxl-job分布式任务调度平台。xxl-job是一款轻量级定时任务可以分布式部署的调度平台。很多大的公…

设计模式之观察者模式(上)

观察者模式 1)概述 1.定义 定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。 观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图&#…

001-谷粒商城-微服务剖析

1、架构图 还是很强的,该有的都有 2、微服务模块 SpringCloudAlibaba组件包括 SentinelNacosRocketMQSeata 搭配SpringCloudAlibaba组件 OpenFeignGateWayRibbn gateway使用了SpringWebFlux,前几天研究到,为什么springboot不直接使用Spri…

小样本计数网络FamNet(Learning To Count Everything)

小样本计数网络FamNet(Learning To Count Everything) 大多数计数方法都仅仅针对一类特定的物体,如人群计数、汽车计数、动物计数等。一些方法可以进行多类物体的计数,但是training set中的类别和test set中的类别必须是相同的。 为了增加计数方法的可拓…