【自学】利用python进行数据分析 LESSON6 <pandas入门——pandas数据结构介绍2>

news/2024/5/7 4:53:49/文章来源:https://blog.csdn.net/mzy20010420/article/details/127042765

目录

前言

一、DataFrame

1. 列的选取

2. 行的选取

3. 列的修改

4. 列的删除

 5. 嵌套字典赋给DataFrame

总结


前言

继续上一节的内容。往期内容如下:

【自学】利用python进行数据分析 LESSON5 <pandas入门——pandas数据结构介绍1>_Rachel MuZy的博客-CSDN博客主要学习了pandas的数据结构,包括 Series 和 DataFramehttps://blog.csdn.net/mzy20010420/article/details/127026241


一、DataFrame

行也可以通过位置或特殊属性的 loc 进行选取,列的引用直接说明列的名称即可

1. 列的选取

DataFrame中的一列,可以按照字典型标记或属性那样检索为series:

示例:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China', 'Japan'],'years': [2000, 2001, 2002, 2003],'pop': [1.5, 3.6, 2.4, 5.1]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
val = pd.Series([-1.2, -1.5, -1.7])
frame['debt'] = val
val_1 = pd.Series([100, 200, 300], index = [0, 1, 3])
frame['pofit'] = val_1
print(frame)
frame_1 = frame['state']
print(frame_1)
frame_2 = frame.state
print(frame_2)
#可以说,frame['state']和frame.state是等价的

结果:

   years     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003     Japan  5.1   NaN  300.0
0    Astrilia
1      Mexico
2       China
3       Japan
Name: state, dtype: object
0    Astrilia
1      Mexico
2       China
3       Japan
Name: state, dtype: object

2. 行的选取

通过特殊属性loc进行选取:

示例:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China', 'Japan'],'years': [2000, 2001, 2002, 2003],'pop': [1.5, 3.6, 2.4, 5.1]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
val = pd.Series([-1.2, -1.5, -1.7])
frame['debt'] = val
val_1 = pd.Series([100, 200, 300], index = [0, 1, 3])
frame['pofit'] = val_1
print(frame)#当行为默认的索引标签时
frame_1row = frame.loc[1]
print(frame_1row)#当行有自己设定的索引标签时
frame_label = pd.DataFrame(data, columns = ['years', 'state', 'pop'], index = ['one', 'two', 'three', 'four'])
print(frame_label)
frame_label_row = frame_label.loc['two']
print(frame_label_row)

结果:

   years     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003     Japan  5.1   NaN  300.0
years      2001
state    Mexico
pop         3.6
debt       -1.5
pofit     200.0
Name: 1, dtype: objectyears     state  pop
one     2000  Astrilia  1.5
two     2001    Mexico  3.6
three   2002     China  2.4
four    2003     Japan  5.1
years      2001
state    Mexico
pop         3.6
Name: two, dtype: object

3. 列的修改

列的引用是可以修改的。例如空的‘debt’列可以赋值为标量值或值数组。

示例:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China'],'years': [2000, 2001, 2002],'pop': [1.5, 3.6, 2.4]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
print(frame)
frame['debt'] = 16.2
print(frame)
frame['pofit'] = np.random.randint(100, 200, size = 3)
print(frame)

结果:

   years     state  pop
0   2000  Astrilia  1.5
1   2001    Mexico  3.6
2   2002     China  2.4years     state  pop  debt
0   2000  Astrilia  1.5  16.2
1   2001    Mexico  3.6  16.2
2   2002     China  2.4  16.2years     state  pop  debt  pofit
0   2000  Astrilia  1.5  16.2    192
1   2001    Mexico  3.6  16.2    138
2   2002     China  2.4  16.2    140

 当将列表或数组赋值给一个列时,值的长度必须和DataFrame的长度相匹配。

示例:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China', 'Japan'],'years': [2000, 2001, 2002, 2003],'pop': [1.5, 3.6, 2.4, 5.1]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
print(frame)
val = pd.Series([-1.2, -1.5, -1.7])
frame['debt'] = val
print(frame)
val_1 = pd.Series([100, 200, 300], index = [0, 1, 3])
frame['pofit'] = val_1
print(frame)

结果:

   years     state  pop
0   2000  Astrilia  1.5
1   2001    Mexico  3.6
2   2002     China  2.4
3   2003     Japan  5.1years     state  pop  debt
0   2000  Astrilia  1.5  -1.2
1   2001    Mexico  3.6  -1.5
2   2002     China  2.4  -1.7
3   2003     Japan  5.1   NaNyears     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003     Japan  5.1   NaN  300.0

如果被复制的列不存在,则会生成一个新的列:

示例:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China', 'Japan'],'years': [2000, 2001, 2002, 2003],'pop': [1.5, 3.6, 2.4, 5.1]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
val = pd.Series([-1.2, -1.5, -1.7])
frame['debt'] = val
val_1 = pd.Series([100, 200, 300], index = [0, 1, 3])
frame['pofit'] = val_1
print(frame)#给新的一列赋值
frame['date'] = np.random.randint(1, 10, size = 4)
print(frame)

结果:

   years     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003     Japan  5.1   NaN  300.0years     state  pop  debt  pofit  date
0   2000  Astrilia  1.5  -1.2  100.0     7
1   2001    Mexico  3.6  -1.5  200.0     1
2   2002     China  2.4  -1.7    NaN     8
3   2003     Japan  5.1   NaN  300.0     4

4. 列的删除

 用del函数

示例:先增添一个由布尔值组成的列:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China', 'Mexico'],'years': [2000, 2001, 2002, 2003],'pop': [1.5, 3.6, 2.4, 5.1]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
val = pd.Series([-1.2, -1.5, -1.7])
frame['debt'] = val
val_1 = pd.Series([100, 200, 300], index = [0, 1, 3])
frame['pofit'] = val_1
print(frame)'''现在构建一个布尔值组成的数组,如果state == Mexico,则在FT列输出T,否则为F'''
#方法1
frame['TF'] = frame.state == 'Mexico'
print(frame)print(frame.TF[0])#方法2
Buer = []
for i in range(4):Buer.append(frame.state[i] == 'Mexico')
frame['tf'] = Buer
print(frame)

结果:

   years     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003    Mexico  5.1   NaN  300.0years     state  pop  debt  pofit     TF
0   2000  Astrilia  1.5  -1.2  100.0  False
1   2001    Mexico  3.6  -1.5  200.0   True
2   2002     China  2.4  -1.7    NaN  False
3   2003    Mexico  5.1   NaN  300.0   True
Falseyears     state  pop  debt  pofit     TF     tf
0   2000  Astrilia  1.5  -1.2  100.0  False  False
1   2001    Mexico  3.6  -1.5  200.0   True   True
2   2002     China  2.4  -1.7    NaN  False  False
3   2003    Mexico  5.1   NaN  300.0   True   True进程已结束,退出代码0

然后删除TF列:

import pandas as pd
import numpy as npdata = {'state': ['Astrilia', 'Mexico', 'China', 'Mexico'],'years': [2000, 2001, 2002, 2003],'pop': [1.5, 3.6, 2.4, 5.1]}
frame = pd.DataFrame(data, columns = ['years', 'state', 'pop'])
val = pd.Series([-1.2, -1.5, -1.7])
frame['debt'] = val
val_1 = pd.Series([100, 200, 300], index = [0, 1, 3])
frame['pofit'] = val_1
print(frame)'''现在构建一个布尔值组成的数组,如果state == Mexico,则在FT列输出T,否则为F'''
#构建一个新的列
frame['TF'] = frame.state == 'Mexico'
print(frame)#删除该列
del frame['TF']
print(frame)

结果:

   years     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003    Mexico  5.1   NaN  300.0years     state  pop  debt  pofit     TF
0   2000  Astrilia  1.5  -1.2  100.0  False
1   2001    Mexico  3.6  -1.5  200.0   True
2   2002     China  2.4  -1.7    NaN  False
3   2003    Mexico  5.1   NaN  300.0   Trueyears     state  pop  debt  pofit
0   2000  Astrilia  1.5  -1.2  100.0
1   2001    Mexico  3.6  -1.5  200.0
2   2002     China  2.4  -1.7    NaN
3   2003    Mexico  5.1   NaN  300.0进程已结束,退出代码0

注意这里:

必须要这样写,才可以正常跑通

如果写成这样:

 这两种写法都会报错!!!

 5. 嵌套字典赋给DataFrame

如果嵌套字典被赋值给DataFrame,pandas会将字典的键作为列,内部字典的键作为行索引:

示例:

import pandas as pd
import numpy as nppop = {'MZY': {2001: 2.4, 2002: 2.9},'DRX': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = pd.DataFrame(pop)
print(frame)

结果:

      MZY  DRX
2001  2.4  1.7
2002  2.9  3.6
2000  NaN  1.5

可以使用类似于numpy的语法对其进行转置:

示例:

import pandas as pd
import numpy as nppop = {'MZY': {2001: 2.4, 2002: 2.9},'DRX': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = pd.DataFrame(pop)
print(frame)#转置
print(frame.T)

结果:

      MZY  DRX
2001  2.4  1.7
2002  2.9  3.6
2000  NaN  1.52001  2002  2000
MZY   2.4   2.9   NaN
DRX   1.7   3.6   1.5

如果显示指明索引的话,内部字典的键不会被排序:

示例:

import pandas as pd
import numpy as nppop = {'MZY': {2001: 2.4, 2002: 2.9},'DRX': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame = pd.DataFrame(pop)
print(frame)frame1 = pd.DataFrame(pop, index=[2000, 2002, 2001, 2003])
print(frame1)

结果:

      MZY  DRX
2001  2.4  1.7
2002  2.9  3.6
2000  NaN  1.5MZY  DRX
2000  NaN  1.5
2002  2.9  3.6
2001  2.4  1.7
2003  NaN  NaN


总结

尽管Series和DataFrame不能解决所有问题,但是它们为大多数应用提供了一个有效、易用的基础。

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

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

相关文章

数据结构初阶 顺序表补充

一. 题目的要求 写出三种链表的接口函数 它们的功能分别是 1 查找数的位置 2 在pos位置插入值 3 在pos位置删除值 二. 实现pos 这个其实很简单 找到一步步遍历 找到这个数字就返回 找不到就提示用户下 这 个数字不存在 int SeqListFind(SL* ps,int x) {int i;for ( i …

Red Hat Enterprise Linux release 8.0 (Ootpa)-性能调优工具Tuned

一、Tuned简介Tuned是Red Hat Linux操作系统自带的性能调优工具,通过针对特定应用场景提供配置来改善系统性能,自Red Hat Enterprise Linux/CentOS的6.3版本开始出现,包括两部分tuned和tuned-adm,其中tuned是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供…

SpringBoot二十六课大纲和目录

目录 ​​ 即使是在憎恨和杀戮中,仍然有些东西值得人们为之活下去。一次美丽的相遇,或是为了美丽事物的存在。我们描绘憎恨,是为了描写更重要的东西。我们描绘诅咒,是为了描写解放后的喜悦。 SpringBoot《第一课》_星辰镜的博客…

clickhouse常见部署图及LowCardinality低基数类型优缺点

clickhouse使用jdbc进行查询插入数据操作的部署图 一.读sql的核心是 读分布式表的数据(分布式表可以读取互为副本的本地表的数据,起到容灾的目的),然后使用nginx作为负载均衡器和反向代理,代理后端clickhouse的分布式…

什么是低代码

文章目录no code / low code / pro code按适用范围的维度来分类低代码的技术意义与商业价值技术意义商业价值行业状态速读平台分类不同的实现方式不同的使用群体不同的使用方式优秀开源项目推荐no code / low code / pro code no code:自己编程给自己用&#xff0c…

Yao‘s GC 的通信最优解:Half Gate

参考文献: Bellare M, Hoang V T, Rogaway P. Foundations of garbled circuits[C]//Proceedings of the 2012 ACM conference on Computer and communications security. 2012: 784-796.Zahur S, Rosulek M, Evans D. Two halves make a whole[C]//Annual Interna…

MyBatisPlus入门宝典(二)CRUD

目录 一.添加 二.相关注解 三.修改 四.删除 五.查询 六.条件构造器 七.分页查询 八.全局配置 一.添加 1.配置文件开启SQL日志打印 # 开启SQL日志 mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 2.测试添加方法: …

Unity URP 色彩之旅

Unity URP 色彩之旅 这一切只是色彩科学的冰山一角… 文章目录Unity URP 色彩之旅1 我们是如何感知世界的?1.1 首先要有光!1.2 人眼响应1.3 奇怪的大脑2 我们是如何描述颜色的?2.1 CIE 1931 RGB Color Space2.2 CIE 1931 XYZ Color Space2.3 …

JavaScript高级学习笔记:数据_变量_内存

1. 什么是数据? 2. 什么是内存? 3. 什么是变量? 4. 内存,数据, 变量三者之间的关系 变量保存的是内存中存储的地址值,而变量赋值就是将一个变量保存的内容拷贝一份到另一个变量中 这里面的.就是找obj对应地址值,中内存保存的相应数据 那么是不是所有…

SRv6----报文转发流程

按照下图路径,报文需要从主机H1转发到主机H2,H1将报文发送给节点A处理。节点A、B、D和F均为支持SRv6的设备,节点C和节点E为不支持SRv6的设备。 我们在SRv6源节点A上进行了网络编程,希望报文经过B-C和D-E这两条链路,然后送达节点F&…

华为面向5G的室内覆盖数字化概述

概述 数字化技术催生各行业的不断创新:ICT、媒体、金融、保险在数字化发展 曲线中已经独占鳌头,零售、汽车、油气化工、健康、矿业、农业等也在加速 其进程。促进数字化进程的关键技术包括软件定义设备、大数据、云计算、区 块链、网络安全、时延敏感网…

(附源码)SSM医疗垃圾管理系统JAVA计算机毕业设计项目

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

美团java一面面经

目录1.了解static吗,static数据存在哪?生命周期什么样的2.了解final吗,讲讲下面这段代码的结果3.讲讲volatile吧4.讲讲两个锁的区别(reentrantlock和synchronized)5.讲讲线程池里线程的创建与销毁,核心线程可以销毁吗?…

.NET 开源项目推荐之 直播控制台解决方案 Macro Deck

在直播圈有个很受欢迎的直播控制台程序Macro Deck, 它是基于Apache 2.0协议开源的.NET 应用。流媒体是一个吸引数亿万玩家的严肃行业。 最受欢迎的游戏锦标赛的转播获得了数百万的观看次数,从商业角度来看,这也使游戏行业变得有趣。在直播圈有个很受欢迎的直播控制台程序Mac…

牛客网专项练习30天Pytnon篇第07天

1.在Python中,使用open方法打开文件,语法如下:open(文件名,访问模式),如果以二进制格式打开一个文件用于追加,则访问模式为:(C) A.rb B.wb C.ab D.a 解析: "r",&q…

看完这篇 教你玩转渗透测试靶机vulnhub——hackableII

Vulnhub靶机hackableII渗透测试详解Vulnhub靶机介绍:Vulnhub靶机下载:Vulnhub靶机安装:Vulnhub靶机漏洞详解:①:信息收集:②:FTP匿名登录:③:回弹shell:④&am…

Mybatis - 一二级缓存的原理

Mybatis - 一二级缓存的原理前言一. 一级缓存原理1.1 原理分析1.2 一级缓存 Key1.3 查询逻辑1.4 一级缓存的清除或失效场景1.5 一级缓存总结二. 二级缓存原理2.1 二级缓存的实验2.2 二级缓存的开启和相关配置解析2.3 二级缓存的封装Cache类2.4 二级缓存的存储2.5 二级缓存总结前…

指静脉代码学习---9.图像质量评价(分类)

一、论文背景 1.论文三--Song 本文提出了一种自适应增强框架的算法流程 先通过质量评价将图像分类,①针对高质量的图像,采用类似直方图均衡化的简单方法②低质量图像,采用类似滤波器增强的方法(虽然时效性较差,但是效果比较明显) ①对质量评价方法历程的概述:

Python 变量作用域

Python 变量作用域1.变量作用域2.局部变量3.全局变量4.同名的局部变量和全局变量5.global 语句1.变量作用域 Python 中规定每个变量都有它的作用域, 即变量只有在作用域范围内才是可见可用的。 作用域能避免程序代码中的名称冲突,在一个函数中定义的变量…

Java学习 --- 面向对象-继承

一、为什么需要继承 我们编写了两个类,一个是Pupil类,一个是Graduate类 问题:两个类的属性和方法有很多是相同的,怎么办? Pupil类: package com.javase.extend_;public class Pupil {public String nam…