人工智能研究生前置知识—扩展程序库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 pd

s = 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.0

A             int64
B    datetime64[ns]
C           float64
dtype: object

RangeIndex(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  11
            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

对列进行切片选择

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: int32

             A   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
10
             C
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  23
             A   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
----------------
True
             A     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.0
     a    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.0
     a    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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

护眼台灯哪个牌子最好,护眼台灯品牌排行榜分享

​护眼台灯哪个牌子最好?尽管一些家长可能对护眼台灯还不甚了解,下面我将介绍这类台灯的几个显著优势:它们专为减少眼睛疲劳和保护视力而设计,提供稳定且柔和的光线;具备灵活的亮度调节功能,适应不同的阅读…

springCloudAlibaba集成seata实战(分布式事物详解)

一、分布式事务 1. 事务介绍 1.1 基础概念 事务:保证我们多个数据库操作的原子性,多个操作要么都成功要么都不成功 事务ACID原则 A(Atomic)原子性:构成事务的所有操作,要么都执行完成,要么全部…

linux之shell命令

shell基础命令 浏览Linux 文件系统 Linux 系统目录结构 /bin: bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。 /boot: 这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。 /dev &…

论文略读:Benign Oscillation of Stochastic Gradient Descent with Large Learning Rate

iclr 2024 reviewer评分 368 论文从理论上研究了通过随机梯度下降(SGD)且采用大学习率训练的神经网络(NN)的泛化特性论文的发现是,由于SGD的大学习率引起的NN权重的振荡,实际上有利于NN的泛化,…

如何用CRMEB Pro版企业微信功能做私域运营

过去3年,线下实体零售发展坎坷,线上经济趁机扩展,出现了社交电商、私域电商等多种电商类型。其中,私域电商备受关注,众多企业纷纷开始尝试,在广大企业商家做私域运营的过程中,企业微信以其强大的…

病毒繁殖-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第52讲。 病毒繁殖&#xf…

BLE一些概念 (转载)

原文见 https://www.cnblogs.com/wahahahehehe/p/15094324.html 1. 物理信道 低功耗蓝牙的工作频段为2.4GHz,这个唯一一个在所有国家都无需授权的频段。 BLE将2.4GHz频段分为40个RF射频信道,每个信道2M宽度,最低的中心频率为2402MHz&#x…

水库之大坝安全监测系统解决方案

一、系统介绍 水库之大坝安全监测系统主要包括渗流监测系统、流量监测系统、雨量监测系统、沉降监测系统组成。每一个监测系统由监测仪器及自动化数据采集装置(内置通信装置、防雷设备)、附件(电缆、通信线路、电源线路)等组成&a…

为什么每个程序员都应经历一次软考?

今天想和大家讨论一个问题,为什么每个程序员都应经历一次软考? 软考是最近几年比较热门的一个国家级考试,但其实80%的人都只是去凑热闹,是去为国家软考办做贡献的。 有因为各种各样的原因直接缺考的,有是为了一些学习以…

java 将 json 数据转为 java 中的对象

一、准备 json 数据 {"name": "mike","age": 17,"gender": 1,"subject": ["math","english"] }二、对应的java对象 package com.demo.controller;import lombok.Data; import java.util.List;Data pu…

若依 ruoyi-vue el-select 多选框 全选 反选 全不选 查询功能

参考文章vueel-select下拉实现&#xff1a;全选、反选、清空功能 如图&#xff0c;优化代码&#xff0c;支持若依字典 import multipleSelect from /components/MultipleSelect/index.vuecomponents: { multipleSelect },<el-row><el-form-item label"分管领域…

ETL中如何运用好MQ消息集成

一、ETL的主要作用 ETL&#xff08;Extract, Transform, Load&#xff09;是数据仓库中的关键环节&#xff0c;其主要作用是将数据从源系统中抽取出来&#xff0c;经过转换和清洗后加载到数据仓库中。具体而言&#xff1a; Extract&#xff08;抽取&#xff09;&#xff1a;从…

python爬虫 - 爬取图片

文章目录 1、爬取图片示例1&#xff1a;使用 .urlretrieve() 函数2、爬取图片示例2 - 使用 open/write 函数3、爬取图片示例33.1 使用 open/write 下载3.2 使用 urlretrieve下载 爬虫的本质&#xff1a;模拟对应的App&#xff0c;浏览器访问对应的地址获取到数据 1、爬取图片示…

【Linux】 OpenSSH_7.4p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

centos 6设置yum源遇到的问题

由于centos6已经不被支持了&#xff0c;直接抄人家的命令是不行的 比如执行这些&#xff08;是wget或者是curl按照自己的改&#xff09; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo yum makecache会报错 需要到对应的镜像源网…

Base64编码方式简介

从二进制转为字符的一种编码。每个base64字符表示长度为6个比特的二进制数据&#xff0c;因此可以推得每3个字节&#xff08;24比特&#xff09;可以由4个base64字符组成。base64字符编码表如下&#xff1a; 因此需要注意的是&#xff0c;当二进制文件长度不是3的倍数的时候&a…

OSCP靶场--RPC1

OSCP靶场–RPC1 考点 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.227.236 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-14 22:21 EDT Nmap scan report for 192.168.227.236 Host is up (0.14s latency). …

20V/200mA高PSRR低噪声高性能车规级稳压器

概述 PCD3900 是一款高性能低压差线性稳压电源&#xff0c;其采用的超低噪声和超高电源抑制比&#xff08;PSRR&#xff09;架构对噪声敏感的信号采集和无线通信应用供电。 PCD3900 被设计为一个高性能电流基准后跟随一个高性能电压缓冲器&#xff0c;其可容易地通过并联以进一…

MySQL之锁详细总结

介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用外&#xff0c;数据也是一种供多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&…

如何在Windows使用固定公网地址SSH远程访问本地Archcraft系统

文章目录 1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 Archcraft是一个基于Arch Linux的Linux发行版&#xff0c;它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。 C…