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.mzph.cn/news/97223.shtml

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

相关文章

计算机视觉中的可解释性分析

计算机视觉中的可解释性分析是指通过不同的方法和技术来解释和理解深度学习模型对图像或视频数据的预测和决策过程。这是一个非常重要的领域&#xff0c;因为深度学习模型通常被认为是“黑盒子”&#xff0c;很难理解其内部工作原理。可解释性分析的目标是提供对模型决策的更好…

vue3使用知识点总结

一、vue3 项目搭建 npm 6.x npm init vitelatest myvue3 --template vuevue 3.2.26使用 element plus ui 框架 npm i -S element plus//全部引入 import ElementPlus from element-plus; import element-plus/dist/index.css; const Vue createApp(App); Vue.use(ElementPl…

1Panel开源面板项目(https://github.com/1Panel-dev)

1Panel开源面板项目&#xff08;https://github.com/1Panel-dev&#xff09;自2023年3月发布以来&#xff0c;受到了很多社区用户的喜爱。作为一款现代化、开源的Linux服务器运维管理面板&#xff0c;1Panel为用户提供免费的服务器搭建与管理资源服务 优点&#xff1a;安装方式…

腾讯会议录制没有声音?看完这篇你就懂了

“腾讯会议录制的视频怎么没有声音呀&#xff1f;老师用腾讯会议上网课&#xff0c;就想用腾讯会议内置的录屏功能录下来&#xff0c;可是录制的视频没有声音&#xff01;真的服了&#xff0c;有没有人知道怎么解决的&#xff0c;帮帮忙。” 腾讯会议是一种常用的远程会议工具…

基于遗传算法的新能源电动汽车充电桩与路径选择(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

iTOP-RK3588开发板使用 tensorflow框架

TensorFlow 是一个软件库或框架&#xff0c;由 Google 团队设计&#xff0c;以最简单的方式实现机器学习和深度学习概念。它结合了优化技术的计算代数&#xff0c;便于计算许多数学表达式。TensorFlow 有以下 重要功能 - 它包含一个叫做张量概念&#xff0c;用来创建多维数组&…

【密评】商用密码应用安全性评估从业人员考核题库(五)

商用密码应用安全性评估从业人员考核题库&#xff08;五&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 1001 单项选择题 下列分组密码认证模式中&#xff0c;使用密钥最少的…

深入浅出DAX:购买推荐及产品ABC分类分析

深入浅出DAX&#xff1a;购买推荐及产品ABC分类分析 DAX运算求值的三步骤。首先是检测筛选&#xff0c;然后将筛选功能应用于基础表格&#xff0c;最后计算结果。DAX中的筛选器函数是复杂且功能强大的函数。例如筛选函数可用于操作数据上下文来创建动态计算。 01、使用细节说…

Spring Boot如何配置CORS支持

Spring Boot如何配置CORS支持 CORS&#xff08;跨源资源共享&#xff09;是一种Web浏览器的安全性功能&#xff0c;用于控制网页上的脚本文件从不同的源加载其他网页资源。在开发现代Web应用程序时&#xff0c;通常需要跨域请求不同的资源&#xff0c;如API服务或其他Web应用程…

Python三维模型处理基础-引言

【版权声明】 本文为博主原创文章&#xff0c;未经博主允许严禁转载&#xff0c;我们会定期进行侵权检索。 更多算法总结请关注我的博客&#xff1a;https://blog.csdn.net/suiyingy&#xff0c;或”乐乐感知学堂“公众号。 本文章来自于专栏《Python三维模型处理基础》的系列文…

前端系列-1 HTML+JS+CSS基础

背景&#xff1a; 前端系列会收集碎片化的前端知识点&#xff0c;作为自己工作和学习时的字典&#xff0c;欢迎读者收藏和使用。 笔者是后端开发&#x1f636;前端涉猎不深&#xff0c;因此文章重在广度和实用&#xff0c;对原理和性能不会过多深究。 1.html 1.1 html5网页结…

嵌入式处理趋势,第一部分:超集成MCU

当今的嵌入式微控制器&#xff08;MCU&#xff09;是协同和创新的惊人例子。单个芯片上可容纳30,000至2百万个门&#xff0c;直到最近&#xff0c;各种集成的组件和模块都被视为独立的高级IC。 例如&#xff0c;当前典型的MCU设备&#xff08;下面的图1&#xff09;可能包含以…

Quarto 入门教程 (1):简单介绍和资料汇总

本推文是 “手把手教你使用 Quarto 构建文档” 教程的第一部分&#xff0c;本文先介绍 Quarto 构建文档的原理&#xff1b;可创建的文档类型&#xff1b;对应的参考资源分享。 下一部分&#xff0c;会手把手介绍如何使用它&#xff08;下次推文吧&#xff5e;&#xff09;。 …

Springboot使用Aop保存接口请求日志到mysql(及解决Interceptor拦截器中引用mapper和service为null)

一、Springboot使用Aop保存接口请求日志到mysql 1、添加aop依赖 <!-- aop日志 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 2、新建接口保存数据…

排序算法之【归并排序】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

chrome窗口

chrome 窗口的层次&#xff1a; 父窗口类名&#xff1a;Chrome_WidgetWin_1 有两个子窗口&#xff1a; Chrome_RenderWidgetHostHWNDIntermediate D3D Window // 用于匹配 Chrome 窗口的窗口类的前缀。 onst wchar_t kChromeWindowClassPrefix[] L"Chrome_WidgetWin_…

《低代码指南》——低代码维格云服务菜单

简介​ 快速了解付费客户能够获得维格服务团队哪些服务,本篇内容不包含使用免费试用版本的客户。 了解维格表产品价格与功能权益:戳我看价格与权益​ 客户付费后能得到哪些服务项目?​ 常规服务项目:

使用Java Spring Boot构建高效的爬虫应用

本文将介绍如何使用Java Spring Boot框架来构建高效的爬虫应用程序。通过使用Spring Boot和相关的依赖库&#xff0c;我们可以轻松地编写爬虫代码&#xff0c;并实现对指定网站的数据抓取和处理。本文将详细介绍使用Spring Boot和Jsoup库进行爬虫开发的步骤&#xff0c;并提供一…

一、Excel VBA 是个啥?

Excel VBA 从入门到出门一、Excel VBA 是个啥&#xff1f;二、Excel VBA 简单使用 &#x1f44b;Excel VBA 是个啥&#xff1f; ⚽️1. Excel 中的 VBA 是什么&#xff1f;⚽️2. 为什么 VBA 很重要&#xff1f;⚽️3. 是否有无代码方法可以在 Excel 中实现工作流程自动化&…

git cherry-pick常用命令详解

1. 基本用法 将指定的提交(commit)应用与其他分支 // 将指定的提交commitHash&#xff0c;应用于当前分支。这会在当前分支产生一个新的提交&#xff0c;当然它们的哈希值会不一样 git cherry-pick <commitHash> // 转移该分支的最新一次提交 git cherry-pick 分支名2.…