Python数据攻略-DataFrame的数据计算和整理

大家好,我是Mr数据杨。今天,我们要踏上一场探索Python的旅程,途中我们将讲解算术运算、NumPy和SciPy函数的应用、DataFrame的排序、过滤、统计和遍历等技巧。想象一下如果《三国演义》中的诸葛亮有了Python的帮助,他将如何更有效地指挥战事。

想象《三国演义》中的诸葛亮,通过Python的算术运算预估兵力、粮草,而后使用NumPy和SciPy函数计算最优的行军路线和时间。这将使他的军队更具优势。

而在战场上,诸葛亮需要不断掌握形势变化,这就需要像DataFrame进行排序一样,按优先级排序重要情报,通过DataFrame过滤数据将无关的信息筛选掉,让军情明了。

诸葛亮就如同运用DataFrame数据统计一样,评估自己和敌方的实力对比,预测战争结果。有了这些数据,他可以找到战争的转折点。

就像DataFrame数据遍历一样,诸葛亮需要逐一查看各个战况,决定是否需要调动兵力,或者是否有必要改变策略。

在这个旅程中,我们将一起学习如何使用Python处理数据,像诸葛亮一样明察秋毫,让我们一起开始吧!

文章目录

  • 应用算术运算
  • 应用NumPy和SciPy函数
    • DataFrame进行排序
    • DataFrame过滤数据
    • DataFrame数据统计
    • DataFrame数据遍历

应用算术运算

我们首先介绍如何应用基本的算术运算。下面是一个示例,演示了如何对DataFrame中的列进行加减乘除运算:

df['没年'] - df['生年']

这段代码将计算"没年"列和"生年"列之间的差值,并返回一个新的Series对象。

另一个示例是对"寿命"列进行除法运算:

df['寿命'] / 100

这段代码将"寿命"列中的每个元素除以100,并返回一个新的Series对象。

除了基本的算术运算,我们还可以使用线性组合公式计算汇总数据。下面的代码演示了如何使用线性组合公式计算汇总数据并将其添加到DataFrame中:

df['total'] = 0.4 * df['商業'] + 0.3 * df['農業'] + 0.3 * df['文化']

这段代码将根据给定的权重,对"商業"、"農業"和"文化"三列进行线性组合计算,并将结果添加到名为"total"的新列中。

运算结果示例

应用NumPy和SciPy函数

接下来,我们将介绍如何使用NumPy和SciPy函数在Pandas的Series或DataFrame对象上进行操作。下面的代码演示了如何使用NumPy的numpy.average()函数计算考生的总考试成绩:

import numpy as npdata = df.iloc[:, 13:16]
np.average(data.astype(np.float), axis=1, weights=[0.4, 0.3, 0.3])

这段代码首先从DataFrame中提取出包含考试成绩的三列数据,然后使用numpy.average()函数计算加权平均值。其中,axis=1表示按行进行计算,weights=[0.4, 0.3, 0.3]指定了每个列的权重。

另外,我们还可以直接在DataFrame中添加计算结果列。下面的代码演示了如何将加权平均值添加到DataFrame中:

del df['total']
df['total'] = np.average(df.iloc[:, 13:16].astype(np.float), axis=1, weights=[0.4, 0.3, 0.3])

这段代码

先删除原有的"total"列(如果存在),然后将新的加权平均值计算结果添加到"total"列中。

加权平均值结果示例

DataFrame进行排序

我们可以使用.sort_values()方法对DataFrame进行排序。下面的代码演示了如何按照"寿命"列进行降序排序:

df.sort_values(by='寿命', ascending=False)

这段代码将按照"寿命"列的值进行降序排序,并返回一个排序后的DataFrame。

按照寿命排序结果示例

除了单列排序,我们还可以指定多个列和多个排序方式进行排序。下面的代码演示了如何先按照"生年"列进行降序排序,然后再按照"寿命"列进行降序排序:

df.sort_values(by=['生年', '寿命'], ascending=[False, False])

这段代码将先按照"生年"列进行降序排序,对于生年相同的数据再按照"寿命"列进行降序排序。

按照生年和寿命排序结果示例

DataFrame过滤数据

Pandas的过滤功能类似于在NumPy中使用布尔数组进行索引。下面的代码演示了如何根据条件过滤DataFrame中的数据:

filter_ = df['寿命'] >= 50
df[filter_]

这段代码首先根据条件"寿命大于等于50"生成一个布尔数组,并赋值给filter_变量。然后,使用df[filter_]返回满足条件的行数据。

按照寿命过滤结果示例

我们还可以使用逻辑运算符进行多条件筛选。下面的代码演示了如何筛选出"生年大于等于80"且"寿命大于等于65"的数据:

df[(df['生年'] >= 80) & (df['寿命'] >= 65)]

这段代码使用&运算符对两个条件进行逻辑与操作,并返回满足条件的行数据。

多条件筛选结果示例

此外,我们还可以使用.where()方法替换不满足条件的位置的值。下面的代码演示了如何将"登場"列中不满足条件"登場

大于等于220"的位置替换为0.0:

df['登場'].where(cond=df['登場'] >= 220, other=0.0)

这段代码使用.where()方法将不满足条件的位置的值替换为指定的other值。

DataFrame数据统计

我们可以使用.describe()方法获取DataFrame的基本统计信息。下面的代码演示了如何获取DataFrame的基本统计信息:

df.describe()

这段代码将返回DataFrame的基本统计信息,包括计数、均值、标准差、最小值、25%分位数、50%分位数、75%分位数和最大值等。

另外,我们还可以直接调用相应的方法获取特定统计信息。例如,可以使用.mean()方法获取DataFrame的均值:

df.mean()

这段代码将返回DataFrame的每列的均值。

也可以针对特定的列进行统计,例如:

df['total'].mean()

这段代码将返回"total"列的均值。

同样地,使用.std()方法可以获取DataFrame或特定列的标准差。

df.std()
df['total'].std()

DataFrame数据遍历

在遍历DataFrame时,我们可以使用.items().iteritems()方法遍历DataFrame的列。每次迭代都会产生一个以列名和列数据作为Series对象的元组。

下面的代码演示了如何使用.items()方法遍历DataFrame的列:

for col_label, col in df.iteritems():print(col_label, col, sep='\n', end='\n\n')

这段代码将依次打印出每列的列名和列数据。

同样地,我们还可以使用.iterrows()方法遍历DataFrame的行。下面的代码演示了如何使用.iterrows()方法遍历DataFrame的行:

for row_label, row in df.iterrows():print(row_label, row, sep='\n', end='\n\n')

这段代码将依次打印出每行的行索引和行数据。

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

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

相关文章

海睿思分享 | 企业如何加强采购风险控制

企业运营的主要流程,不会因为企业人员规模或者业务规模大小的差异,而出现巨大的差异。千万亿市值的上市公司、不足百人的新兴公司,面对的经营风险本质上不会有明显的区别。今天我们一起分享企业经营管理中常见的风险应对策略。 对于企业而言…

Treadlocal源码实例详解

我们都知道treadlocal维护变量时候,可以为每个线程维护一个独立的副本,改变的是自己线程的数据。 ThreadLocal公用方法有四个:get,set,remove,intiValue 既然threadLocalMap是局部变量,所以他存…

C++学习之旅 - new运算符

C中利用new操作符在堆区开辟数据 堆中开辟的数据由程序员手动开辟&#xff0c;手动释放&#xff0c;释放利用操作符delete 语法new 数据类型 #include <iostream>using namespace std;int *func(){int* p new int(10);return p; }int main() {int* p func();cout <&…

传奇开服教程完整版GOM引擎超详细的单机架设图文教程(小白一看就会)

准备工具 1.传奇版本和补丁2.热血传奇客户端3.DBC20004.绿盟GOM登录器 服务端安装步骤&#xff1a; 1.把下载好的传奇版本解压在你电脑的D盘 2.补丁文件夹直接解压到你的传奇客户端根目录 3.解压好DBC2000开始安装&#xff0c;安装完成后关闭DBC程序 4.打开控制面板&#xff0…

深入理解Linux虚拟内存管理(四)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核&#xff08;一&#xff09; 深入理解 Linux 内核&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;一&#xff09; Linux 设备驱动程序&#xff08;二&#xff09; Linux 设备驱动程序&#xff08;三&#xf…

锐捷AC的部署实例

进行锐捷AC部署时&#xff0c;遇到了一些问题&#xff0c;遂记录下来&#xff0c;如若大家在项目过程中遇到类似问题可以对照解决。 写在前面&#xff08;锐捷AC的基础配置&#xff09; ac-controller //配置AC的capwap源地址信息&#xff0c;国家码等…

Nginx配置域名证书

Nginx配置域名证书 1、证书存放路径 2、nginx.conf文件中增加以下配置&#xff0c;注意路径不一样&#xff0c;访问地址目录不一样 server {listen 443 ssl http2;server_name jistest.vwatj.ap.vwg;ssl_certificate D:/home/XXX/ssl/2023/XXX.cer; ssl_certificate_key D…

在线配资平台哪家正规?排名在前的有哪些平台?

在线配资平台哪家正规&#xff1f;排名在前的有哪些平台&#xff1f; 比如有永华证券、联华证券、财盛证券、中信证券、东方证券等等这些平台。也是排名比较靠前的&#xff01; 选择平台需要投资者仔细研究不同的在线配资平台的投资风格、费用、客户服务等因素&#xff0c;并根…

《辉煌优配》科技股强势引领A股反弹 沪深两市日成交额再超万亿元

受美联储再度加息扰动&#xff0c;昨日早盘沪深两市指数低开&#xff0c;随后科技股强势拉升&#xff0c;带动商场回暖。到收盘&#xff0c;上证综指报3286.65点&#xff0c;上涨0.64%&#xff1b;深证成指报11605.29点&#xff0c;上涨0.94%&#xff1b;创业板指报2361.41点&a…

A股管家股票自动交易软件系统,功能完善强大

2013年的时候&#xff0c;有个广东的朋友说再用这款A股管家股票自动系统&#xff0c;我当时比较惊讶&#xff0c;以前想过要是有一款股票自动交易软件能偶尔代替我一下就好了&#xff0c;虽然是职业股民&#xff0c;但也经常遇到太忙的时候&#xff0c;实在没时间。然后就在朋友…

亚马逊云科技出海日,让数字经济出海扩展到更多行业和领域

数字化浪潮之下&#xff0c;中国企业的全球化步伐明显提速。从“借帆出海”到“生而全球化”&#xff0c;中国企业实现了从传统制造业“中国产品”出口&#xff0c;向创新“中国技术”和先导“中国品牌”的逐步升级。 作为全球云计算的开创者与引领者&#xff0c;亚马逊云科技…

JDK11+mybatis-plus+shardingsphere分库分表

1、引入jar dynamic-datasource-spring-boot-starter&#xff1a;2.5.6 sharding-jdbc-spring-boot-starter&#xff1a;4.1.1 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId>&…

【单目标优化算法】沙猫群优化算法(Matlab代码实现)

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

华为路由器 NAT 配置

拓扑图 静态 NAT 静态地址转换是指外部网络和内部网络之间的地址映射关系由配置确定&#xff0c;该方式适用于内部网络与外部网络之间存在固定访问需求的组网环境。静态地址转换支持双向互访&#xff1a;内网用户可以主动访问外网&#xff0c;外网用户也可以主动访问内网。 一…

Java 冒泡排序法

冒泡排序法是交换排序法的一种 思想&#xff1a; /** * 冒泡法排序 * 比较相邻的元素。如果第一个比第二个小&#xff0c;就交换他们两个。 * 对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最小的数。 * 针…

冒泡排序法定向冒泡排序法的Python实现

冒泡排序法 冒泡排序法&#xff1a;每轮对相邻的两者进行比较&#xff0c;若顺序不对&#xff0c;则进行位置互换&#xff0c;每轮都将使每轮的 最后一位是该轮的大数。 比如在数列&#xff1a;[71, 1, 14, 78, 75, 38, 10, 49, 40, 95] 第一轮交换&#xff1a;71>1 > […

Java:冒泡排序法

冒泡排序法是最基本的排序法之一&#xff0c;冒泡排序法的运行机制是通过循环遍历元素并调整相邻元素顺序来实现的一种简单排序方法。冒泡排序的实质是相邻两个元素比较&#xff0c;然后按照升序或降序调换位置。 下为降序冒泡排序的代码: public class Training {public sta…

基于Java的冒泡排序法

基本过程&#xff1a; 原始顺序是48&#xff0c; 52&#xff0c; -51 &#xff0c;0 &#xff0c;67 &#xff0c;23&#xff0c; -24。开始48和52比较&#xff0c;48<52&#xff0c;则顺序不变&#xff1b;52和-51比较&#xff0c;52>-51,则两者交换位置&#xff08;48…

冒泡排序法过程分析

冒泡排序法过程分析&#xff1a; 下面是代码。建议先自己尝试去实现一下看看&#xff0c;再来看我是如何实现的。 #include <stdio.h> main() { int a[100],i,j,t,n; scanf("%d",&n); //输入一个数n&#xff0c;表示接下来有n个数 for(i1;i<n;i)…

冒泡排序法全攻略

1 算法介绍 冒泡排序法又叫起泡法&#xff0c;在许多程序设计中&#xff0c;我们需要将一个数列进行排序&#xff0c;以方便统计&#xff0c;常见的排序方法有冒泡排序&#xff0c;二叉树排序&#xff0c;选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍…