Pandas数据结构

文章目录

    • 1. Series数据结构
      • 1.1 Series数据类型创建
      • 1.2 Series的常用属性
        • values
        • index/keys()
        • shape
        • T
        • loc/iloc
      • 1.3 Series的常用方法
        • mean()
        • max()/min()
        • var()/std()
        • value_counts()
        • describe()
      • 1.4 Series运算
        • 加/减法
        • 乘法
    • 2. DataFrame数据结构
      • 2.1 DataFrame数据类型创建
      • 2.2 布尔索引 ★
      • 2.3 DataFrame的常用属性和方法
      • 2.4 DataFrame更改操作
        • 改行索引
        • 解除行索引
        • 改行列名
        • 修改所有的行列
        • 增加、删除列
        • 删除行列
    • 3. Pandas数据导入导出


1. Series数据结构

Series是Pandas的基础数据结构,代表着一列数据,其底层是由Numpy实现的。

Series的特点:

  1. 所有的元素类型都是一致的;
  2. 如果创建Series时,传入整数列表,默认每个元素的类型都是np.int64;
  3. 如果创建Series时,传入的是小数和整数混合列表,默认每个元素的类型都是np.float64
  4. 如果创建Series时,传入的是其他类型的混合,默认每个元素的类型都是object;
  5. 如果创建Series时,传入的是字符串类型列表,默认每个元素的类型也是object。

1.1 Series数据类型创建

利用pd.Series创建一个Series对象,传入的列表作为Series中的数据。

import pandas as pd
s = pd.Series(['Banana', 42])
print(s)'''
代码输出:
0    Banana
1        42
dtype: object
'''

从代码的执行结果中可以发现,当前的Series的数据类型是object。

使用·s.values·属性,可以获去Series中的数据,数据的类型是一个Ndarray。

print(s.values)
print(type(s.values))
'''
代码输出:
['Banana' 42]
<class 'numpy.ndarray'>
'''

如果使用整数和浮点数的混合列表作为参数,Series的默认类型是np.float64类型。

print(pd.Series([1,1.2])
'''
代码输出:
0    1.0
1    1.2
dtype: float64
'''

在创建Series对象时,可以指定行索引index(Series代表一列数据)。

print(pd.Series(['Bill Gates', 'Male'], index=['Name', 'Gender']))
'''
代码输出:
Name      Bill Gates
Gender          Male
dtype: object
'''

注意:
Series代表Pandas数据结构中的列,在Pandas中没有表示行的数据结构。

1.2 Series的常用属性

使用pd.read_csv从CSV文件中加载数据,同时指定数据中的id列作为行索引。

data = pd.read_csv('data/nobel_prizes.csv',index_col='id')

使用loc获取数据中的第941行,此时的row就是一个Series对象。

row = data.loc[941]

loc对应的是行索引,如果行索引是从0开始的数字(和行编号一致),此时lociloc作用相同。

注意:
由于Pandas中没有对应行的数据结构,所以获得第941行之后,数据行被转换成了列,也就是一个Series

使用Print查看数据值:

print(row)
'''
代码输出:
year                                                              2017
category                                                       physics
overallMotivation                                                  NaN
firstname                                                       Rainer
surname                                                          Weiss
motivation           "for decisive contributions to the LIGO detect...
share                                                                2
Name: 941, dtype: object
'''
values

values属性表示当前Series对象的值,类型是Ndarray:

print(row.values)
print(type(row.values))
'''
代码输出:
[2017 'physics' nan 'Rainer' 'Weiss''"for decisive contributions to the LIGO detector and the observation of gravitational waves"'2]
<class 'numpy.ndarray'>
'''
index/keys()

index属性表示当前Series的行索引:

print(row.index)
'''
代码输出:
Index(['year', 'category', 'overallMotivation', 'firstname', 'surname','motivation', 'share'],dtype='object')
'''

keys()方法可以达到同样的效果:

print(row.keys())
# 代码结果和row.index完全相同
shape

shape属性表示当前Series的行数和列数,是一个元组,由于Series表示一列数据,所以没有列数值:

print(row.shape)
'''
代码输出:
(7,)
'''
T

T属性表示当前Series的转置,由于Pandas没有行数据结构,所以转置之后和没有转置没什么区别:

print(row.T)
'''
代码输出:
year                                                              2017
category                                                       physics
overallMotivation                                                  NaN
firstname                                                       Rainer
surname                                                          Weiss
motivation           "for decisive contributions to the LIGO detect...
share                                                                2
Name: 941, dtype: object
'''
loc/iloc

loc可以通过行列索引获取对应的行列,iloc通过行列序号获取对应的行列:

print(row.loc['year'])
print(row.iloc[0])
'''
代码输出:
2017
2017
'''

注意:
lociloc的完整使用方法是:

  • loc[行索引,列索引]
  • iloc[行序号,列序号]

1.3 Series的常用方法

首先,使用数据.列名的方式获取一列数据,形成一个Series对象:

share = data.share
print(share)
'''
代码输出:
id
941    2
942    4
943    4
944    3
945    3..
160    1
293    1
569    1
462    2
463    2
Name: share, Length: 923, dtype: int64
'''
mean()

求平均:

print(share.mean())
'''
代码输出:
1.982665222101842
'''
max()/min()

求最大/小值:

print(share.max())
print(share.min())
'''
代码输出:
4
1
'''
var()/std()

方差和标准差:

print(share.var())
print(share.std())
'''
代码输出:
0.8695473357414776
0.9324952202244672
'''
value_counts()

获取每个值在当前Series对象中的个数:

print(share.value_counts())
'''
代码输出:
1    347
2    307
3    207
4     62
Name: share, dtype: int64
'''

以上输出的含义是,单个人获得诺贝尔奖项的有347次,两个人获得诺贝尔奖项的有307次,三个人获得诺贝尔奖项的有207次…

describe()

计算当前Series对象的各种特征值:

print(share.describe())
'''
代码输出:
count    923.000000
mean       1.982665
std        0.932495
min        1.000000
25%        1.000000
50%        2.000000
75%        3.000000
max        4.000000
Name: share, dtype: float64
'''

1.4 Series运算

创建两个Series对象:

s1 = pd.Series([1,2,3])
s2 = pd.Series([4,5,6])
加/减法

Series执行加法运算时,采用对位相加的方式。

print(s1 + s2)
print(s1 - s2)
'''
代码输出:
0    5
1    7
2    9
dtype: int64
0   -3
1   -3
2   -3
dtype: int64
'''

注意:
对位相加减是基于index值的,也就是说在加减运算执行时,两个index相同的值才算对位。

如果加减运算时,存在index不对位的情况,就会返回NaN值:

print(s1 + pd.Series([0,1]))
'''
代码输出:
0    1.0
1    3.0
2    NaN
dtype: float64
'''

注意!如果我们把其中一个Series对象的index倒序排列,依然不影响最终的结果:

# 倒序排列s2的行索引,再次执行加法,结果不变
print(s1 + s2.sort_index(ascending=False)
乘法

乘法也是对位相乘的:

print(s1 * s2)
'''
代码输出:
0     4
1    10
2    18
dtype: int64
'''

2. DataFrame数据结构

DataFrame是Pandas最重要的数据结构,由一个个的Series组成,可以视为一个二维表:

2.1 DataFrame数据类型创建

pd.DataFrame()方法接收一个字典对象作为参数,每个字典的键值对代表一列数据:

name_list = pd.DataFrame({'Name':['Tom','Bob'],'Job':['Java','Python'],'Age':[28,46]
})
print(name_list)
'''
代码输出:Name     Job  Age
0  Tom    Java   28
1  Bob  Python   46
'''

我们也可以在创建DataFrame的时候,直接指定索引:

  • 通过index参数指定行索引
  • 通过column参数指定列索引
print(pd.DataFrame(data={'Job': ['Java', 'Python'],'Age': [28, 46]},index=['Tom', 'Bob'],columns=['Job', 'Age'])
)
'''
代码输出:Job  Age
Tom    Java   28
Bob  Python   46
'''

2.2 布尔索引 ★

首先,加载数据:

sci = pd.read_csv('data/scientists.csv')
print(sci)
'''
代码输出:Name        Born        Died  Age          Occupation
0     Rosaline Franklin  1920-07-25  1958-04-16   37             Chemist
1        William Gosset  1876-06-13  1937-10-16   61        Statistician
2  Florence Nightingale  1820-05-12  1910-08-13   90               Nurse
3           Marie Curie  1867-11-07  1934-07-04   66             Chemist
4         Rachel Carson  1907-05-27  1964-04-14   56           Biologist
5             John Snow  1813-03-15  1858-06-16   45           Physician
6           Alan Turing  1912-06-23  1954-06-07   41  Computer Scientist
7          Johann Gauss  1777-04-30  1855-02-23   77       Mathematician
'''

取出数据的前5条,head()方法默认取前五条:

sci_5 = sci.head()

布尔索引的使用方法:

bool_index = [True, False, False, False, True]
print(sci_5[bool_index])
'''
代码输出:Name        Born        Died  Age Occupation
0  Rosaline Franklin  1920-07-25  1958-04-16   37    Chemist
4      Rachel Carson  1907-05-27  1964-04-14   56  Biologist
'''

布尔索引中,对应行的值为True就返回,否则就过滤掉。
布尔索引列表必须和数据长度一致,否则会报错。

在实际使用过程中,不可能手动的构造一个布尔索引,通常情况下会通过计算直接生成一个布尔列表。
比如,针对当前数据,我们可以筛选所有年龄大于平均年龄的科学家数据行:

print(sci[sci.Age > sci.Age.mean()]
)
'''
代码输出:Name        Born        Died  Age     Occupation
1        William Gosset  1876-06-13  1937-10-16   61   Statistician
2  Florence Nightingale  1820-05-12  1910-08-13   90          Nurse
3           Marie Curie  1867-11-07  1934-07-04   66        Chemist
7          Johann Gauss  1777-04-30  1855-02-23   77  Mathematician
'''

2.3 DataFrame的常用属性和方法

movie = pd.read_csv('data/movie.csv')
movie.shape 	# 行列数
movie.ndim		# 维度
movie.values	# 值
movie.size		# 元素个数
len(movie)		# 行数
movie.count()	# 计算行数,过滤空行(空行不算行数)
movie.describe()# 对数值列进行特征计算movie + movie	# 数值直接对位相加,字符串直接拼接

2.4 DataFrame更改操作

改行索引

将行索引由数字索引更改为movie_title列:

movie.set_index('movie_title',inplace=True)
解除行索引

解除当前的行索引,并使用数字索引:

movie.reset_index()
改行列名
movie.rename(index={'Avatar':'阿凡达','Star Wars: Episode VII - The Force Awakens':'星期大战7'},columns={'director_name':'导演','color':'颜色'},inplace=True
)
修改所有的行列
index = movie.index.to_list()
index[0] = '阿凡达'
movie.index = index
增加、删除列
movie['has_seen'] = 0
movie['社交媒体点赞数量'] = movie.actor_1_facebook_likes+movie.actor_2_facebook_likes+movie.actor_3_facebook_likes+movie.director_facebook_likes# 在指定位置插入指定列
movie.insert(loc=0,column='利润',value=movie.gross - movie.budget
)
删除行列
movie.drop('社交媒体点赞数量',axis=1)
# axis=1表示删除列
movie.drop('阿凡达')
# 删除行

3. Pandas数据导入导出

# movie.to_pickle('data/movie.pickle')
# movie.to_csv('data/movie2.csv')
# movie.to_csv('data/movie2.tsv',sep='\t')
# movie.to_excel('data/movie.xlsx')
# movie.read_csv()
# movie.read_pickle()
# movie.read_csv(sep='\t')
# movie.read_excel()

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

李沐深度学习记录3:11模型选择、欠拟合和过拟合

通过多项式拟合探索欠拟合与过拟合 import math import numpy as np import torch from torch import nn from d2l import torch as d2l#生成数据集 max_degree 20 # 多项式的最大阶数 n_train, n_test 100, 100 # 训练和测试数据集大小 true_w np.zeros(max_degree) # …

园林园艺服务经营小程序商城的作用是什么

园林园艺属于高单价服务&#xff0c;同时还有各种衍生服务&#xff0c;对企业来说&#xff0c;多数情况下都是线下生意拓展及合作等&#xff0c;但其实线上也有一定深度&#xff0c;如服务售卖或园艺产品售卖等。 基于线上发展可以增强获客引流、品牌传播、产品销售经营、会员…

很普通的四非生,保研破局经验贴

推免之路 个人情况简介夏令营深圳大学情况机试面试结果 预推免湖南师范大学面试结果 安徽大学面试结果 北京科技大学笔试面试结果 合肥工业大学南京航空航天大学面试结果 暨南大学东北大学 最终结果一些建议写在后面 个人情况简介 教育水平&#xff1a;某中医药院校的医学信息…

STL-stack、queue和priority_queue的模拟实现

目录 一、容器适配器 &#xff08;一&#xff09;什么是适配器 &#xff08;二&#xff09;stack和queue的底层结构 二、Stack 三、queue 四、deque双端队列 &#xff08;一&#xff09;优点 &#xff08;二&#xff09;缺陷 五、优先级队列 &#xff08;一&#xff…

成都建筑模板批发市场在哪?

成都作为中国西南地区的重要城市&#xff0c;建筑业蓬勃发展&#xff0c;建筑模板作为建筑施工的重要材料之一&#xff0c;在成都也有着广泛的需求。如果您正在寻找成都的建筑模板批发市场&#xff0c;广西贵港市能强优品木业有限公司是一家值得关注的供应商。广西贵港市能强优…

华为云云耀云服务器L实例评测|Ubuntu云锁防火墙安装搭建使用

华为云云耀云服务器L实例评测&#xff5c;Ubuntu安装云锁防火墙对抗服务器入侵和网络攻击 1.前言概述 华为云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新轻量应用云服务器。多种产品规格&#xff0c;满足您对成本、性能及技术创新的诉求。云耀云服务器L…

基于阴阳对优化的BP神经网络(分类应用) - 附代码

基于阴阳对优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于阴阳对优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.阴阳对优化BP神经网络3.1 BP神经网络参数设置3.2 阴阳对算法应用 4.测试结果&#x…

数据结构与算法--算法

这里写目录标题 线性表顺序表链表插入删除算法 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 线性表 顺序表 链表 插入删除算法 步骤 1.通过循环到达指定位置的前一个位置 2.新建…

VS的调式技巧你真的掌握了吗?

目录 什么是bug? 调式是什么&#xff1f;有多重要&#xff1f; 调试是什么&#xff1f; 调试的基本步骤 debug和release的介绍 windows环境调试介绍 1.调试环境的准备 2.学会快捷键 F11 VS F10 F9 & F5 3.调试时查看程序当前信息 查看临时变量的值 查看内存信…

【物联网】STM32的中断机制不清楚?看这篇文章就足够了

在嵌入式系统中&#xff0c;中断是一种重要的机制&#xff0c;用于处理来自外部设备的异步事件。STM32系列微控制器提供了强大的中断控制器&#xff0c;可以方便地处理各种外部中断和内部中断。本文将详细介绍STM32中断的结构和使用方法。 文章目录 1. 什么叫中断2. 中断优先级…

<学习笔记>从零开始自学Python-之-常用库篇(十二)Matplotlib

Matplotlib 是Python中类似 MATLAB的绘图工具&#xff0c;Matplotlib是Python中最常用的可视化工具之一&#xff0c;可以非常方便地创建2D图表和一些基本的3D图表&#xff0c;可根据数据集&#xff08;DataFrame&#xff0c;Series&#xff09;自行定义x,y轴&#xff0c;绘制图…

IntelliJ IDEA配置Cplex12.6.3详细步骤

Cplex12.6.3版IntelliJ IDEA配置详细步骤 一、Cplex12.6.3版下载地址二、Cplex安装步骤三、IDEA配置CPLEX3.1 添加CPLEX安装目录的cplex.jar包到项目文件中3.2 将CPLEX的x64_win64文件夹添加到IDEA的VM options中 四、检查IDEA中Cplex是否安装成功卸载Cplex 一、Cplex12.6.3版下…

Docker通过Dockerfile创建Redis、Nginx--详细过程

创建Nginx镜像 我们先创建一个目录&#xff0c;在目录里创建Dockerfile [rootdocker-3 ~]# mkdir mynginx [rootdocker-3 ~]# cd mynginx [rootdocker-3 ~]# vim Dockerfile Dockerfile的内容 FROM daocloud.io/library/centos:7 RUN buildDepsreadline-devel pcre-devel o…

代码:对鱼眼相机图像进行去畸变处理

图像投影模型&#xff1a;针孔[fx, fy, cx, cy] 图像畸变模型&#xff1a;切向径向畸变[k1, k2, p1, p2] 说明&#xff1a;用于备忘 第一部分是常规的去畸变操作&#xff0c;在已知内参的情况下对鱼眼相机进行去畸变&#xff0c;这里使用的是remap映射在对图像去畸变后&#x…

竞赛 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

Windows下启动freeRDP并自适应远端桌面大小

几个二进制文件 xfreerdp # Linux下的&#xff0c;an X11 Remote Desktop Protocol (RDP) client which is part of the FreeRDP project wfreerdp.exe # Windows下的&#xff0c;freerdp2.0 主程序&#xff0c;freerdp3.0将废弃 sdl-freerdp.exe # Windows下的&…

appscan的两种手动探索扫描方式

文章目录 一、使用火狐FoxyProxy浏览器代理探索二、使用appscan内置浏览器探索 一、使用火狐FoxyProxy浏览器代理探索 首先火狐浏览器需安装FoxyProxy 先在扩展和主题里搜FoxyProxy 选FoxyProxy Standard,然后添加到浏览器就行 添加后浏览器右上角会有这个插件 打开apps…

【算法学习】-【双指针】-【快乐数】

LeetCode原题链接&#xff1a;202. 快乐数 下面是题目描述&#xff1a; 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果…

cad图纸如何防止盗图(一个的制造设计型企业如何保护设计图纸文件)

在现代企业中&#xff0c;设计图纸是公司的重要知识产权&#xff0c;关系到公司的核心竞争力。然而&#xff0c;随着技术的发展&#xff0c;员工获取和传播设计图纸的途径越来越多样化&#xff0c;如何有效地防止员工复制设计图纸成为了企业管理的一大挑战。本文将从技术、管理…

【动手学深度学习-Pytorch版】Transformer代码总结

本文是纯纯的撸代码讲解&#xff0c;没有任何Transformer的基础内容~ 是从0榨干Transformer代码系列&#xff0c;借用的是李沐老师上课时讲解的代码。 本文是根据每个模块的实现过程来进行讲解的。如果您想获取关于Transformer具体的实现细节&#xff08;不含代码&#xff09;可…