其实你就学不会 Python

news2024/11/14 16:54:03

标题党一下,Python 程序员成千上万,当然有很多人学得会。这里说的“你”,是指职场中的非专业人员。
职场人员一般会用 Excel 处理数据,但也会有很多无助的情况,比如复杂计算、重复计算、自动处理等,再遇上个死机没保存,也常常能把人整得崩溃。如果学会了程序语言,这些问题就都不是事了。那么,该学什么呢?
无数培训机构和网上资料都会告诉我们:Python!
Python 代码看起来很简单,只要几行就能解决许多麻烦的 Excel 问题,看起来真不错。
但真是如此吗?作为非专业人员,真能用 Python 来协助我们工作吗?
嘿嘿,只是看上去很美!
事实上,Python 并不合适职场人员,因为它太难了,作为职场非专业人员的你就学不会,甚至,Python 的难度可能会大到让你连 Python 为什么会难到学不会的道理都理解不了的地步。

日常工作中碰到的数据大都是 Excel 表格那种,称为结构化数据。程序语言要想用来协助日常工作,就需要有较强的结构化数据处理功能。
Python 用来处理结构化数据需要有一个叫 Pandas 的开源包,这东西不是 Python 的固有组件,你得自己再下载安装,过程就不太简单了,要配一堆让初学者晕死的东西。当然还可以借助第三方程序,但这些第三方程序本身的安装又是个问题,启动起来又有一堆工程环境配置让人不知所措(人家设计出来是做大型应用的)。还有调试,你不可能一下子就把代码写对,Python 开发环境的调试功能本来就不太好,Pandas 又不是 Python 的原生内容,调试就更费劲。
这些麻烦还是题外的,也能克服一下。关键问题在于,Pandas 就不是为结构化数据设计的,会有许多不能如你所愿而且非常费解的东西.

我们通过例子来看一下,比如这样的表格:
 

029888278100png


除第一行外的每行数据称为一条记录,对应了一件事、一个人、一张订单……,第一行是标题,说明记录由哪些属性构成,这些记录都有相同的属性,整个表就是这样一些记录的集合。

Pandas 中主要用一个叫 DataFrame 的东西来处理这类表格数据,上面的表格读入 DataFrame 后是这样的:
 

clipboardpng


看起来和 Excel 差不多,只是行号是从 0 开始的。

先试试汇总各部门的人数:

import pandas as pd
data = pd.read_csv('Employee.csv')
group = data.groupby("DEPT")
dept_num = group.count()
print(dept_num)

import pandas as pd data = pd.read_csv('Employee.csv') group = data.groupby("DEPT") dept_num = group.count() print(dept_num)

分组后再计数,这是常规思路,但结果有点尴尬:
 

029887690100png


部门人数,也就是每个分组的成员数量,只要有一列就行了,为什么出来这么多列,它像是对每一列都做了同样的动作,好奇怪。
这是因为 DataFrame 本质上是个矩阵,而不是记录的集合,Python 也没有记录这样的概念。count 作用在矩阵上,就会对每一列计数,有点意想不到吧。
简单的过滤运算,比如取出研发部员工,我们想像中的结果应该是人员表的子集,但实际上是整个人员表(矩阵)和一些被选择的行位置(称为行索引),可以理解为子矩阵。这时候输出结果可能也看不出啥,但想进一步操作,比如给研发部员工涨 5% 工资,你就会再次发现“意想不到”了。
用 DataFrame 处理结构化数据时,要绕到矩阵的思路上去,这会非常挑战初学者的理解力。

怎样才能正确输出部门人数呢?要用 size 函数,它才是用来查看各组的成员数。

import pandas as pd
data = pd.read_csv('Employee.csv')
group = data.groupby("DEPT")
dept_num = group.size()
print(dept_num)

这个结果就正常了:
 

029887743100png


不过,这个结果不再是二维的 DataFrame 了,而是个一维的 Series,它不能再继续应用 DataFrame 的方法了,又是“意想不到”。
明明分组汇总结果也是个有行有列的结构化数据表,继续用 DataFrame 不好吗?为什么要再搞一种东西?让人费解。

Python 并没有止步于这两个。比如,分组运算的本质就是把大集合拆成小集合,结果应该是个集合的集合。那我们看看 DataFrame 分组后是什么样子呢?把上面代码中分组结果打印出来看。

import pandas as pd
data = pd.read_csv('Employee.csv')
group = data.groupby("DEPT")
print(group)

结果出来:

"pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001ADBC9CE0F0"

这是个啥东东?这是集合的集合吗?
上网搜一下,原来这叫做可迭代对象,它的每个成员都是以 DataFrame+ 分组索引构成的,也有方法再拆开看。这个被称为什么对象的东西,本质上是大矩阵的子矩阵构成的集合,勉强也能算是集合的集合了,但它并不能像普通集合那样直接用序号取某个成员(比如 group[0])。
估计到这里不少人已经晕了,完全搞不清我都在胡说八道些什么。嗯,这就对了,这才是职场人员的正常状态。
Python 有 N 多“对象”来描述同样数据,各有各的适应场景和运算规则,如 DataFrame 可以用 query 函数过滤,而 Series 不可以,分组后这个对象更是完全不同。这些东西之间转换还很“丝滑”,稍不留神就变成另一种不认识的东西。结果,编程基本靠搜,即使跑对了也还是搞不懂记不住,下次还得搜。

再进一步,将各部门员工按照入职时间从早到晚进行排序。这只要分组后将子集按照入职时间排序即可,写出来是这样的:

import pandas as pd
employee = pd.read_csv("Employee.csv")
employee['HIREDATE']=pd.to_datetime(employee['HIREDATE'])
dept_g = employee.groupby('DEPT',as_index=False)
dept_list = []
for index,group in dept_g:
    group = group.sort_values('HIREDATE')
    dept_list.append(group)
employee_new = pd.concat(dept_list,ignore_index=True)
print(employee_new)

看起来有点啰嗦,要写个 for 循环一点点做,这似乎体现不出集合化数据处理的优势了,毕竟结构化数据都是批量集合式的,都写这么啰嗦, 那么和 VBA 什么的区别也不大了。
嗯,其实 Python 也有不用 for 循环的写法:

import pandas as pd
employee = pd.read_csv("Employee.csv")
employee['HIREDATE']=pd.to_datetime(employee['HIREDATE'])
employee_new = employee.groupby('DEPT',as_index=False).apply(lambda x:x.sort_values('HIREDATE')).reset_index(drop=True)
print(employee_new)

但是,这里最关键的倒数第二句,有个 apply 和 lambda 的那句,能看明白吗?
这是所谓的“函数语言”概念,写法复杂度和理解难度都超出了大多数非专业人员的能力范畴,具体啥意思,这里也懒得解释了,自己去搜搜看能不能搞懂。

简单总结一下:
DataFrame 本质是矩阵,不是记录的集合,编程要按矩阵的方法来思考,经常会有点绕,结果也会有“意想不到”。
更麻烦的是,Python 有太多相似的数据类型,比如 Series,DataFrame,分组对象都可以表示某种集合,但各有各的规则,计算方法更是难以捉摸。想理解这些原理后正确运用,其难度和繁度都不是非专业人员能够和应该做的。
还有 apply+lambda 这种东西,不用呢,批量数据处理的代码太啰嗦,想用却很难搞懂。
事实上,Python 是个段位很高的东西。对于非专业人员来讲,Python 的强大和方便,只存在于培训班。你很少见到周围有职场人员在用 Python 倒腾 Excel,Python 真正的使用者都是重度专业人员,主要是搞人工智能的那群人。

面向非专业人员,esProc SPL 就简单多了。
SPL 只有一种集合,结构化数据表就是记录的集合,分组结果就是集合的集合。这些集合上可以执行同样一套运算。
来看刚才的例子,分组汇总简单 count 就可以得到正常的结果

A
1=file("Employee.csv").import@tc()
2=A1.groups(DEPT;count(~):cnt)

clipboardpng

分组的结果就是集合的集合,很好理解:

A
1=file("Employee.csv").import@tc()
2=A1.group(DEPT)

clipboardpng

分组子集再排序不用难懂的 lambda 也依然简洁,SPL 把函数语言已经化于无形

A
1=file("Employee.csv").import@tc()
2=A1.group(DEPT)
3=A2.conj(~.sort(HIREDATE))

esProc SPL 才是非专业人员真正有可能学得会用得起来的程序语言。

SPL开源地址

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

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

相关文章

中石油笔试25届秋招考什么?如何通过在线测评|附真题库面试攻略

职小豚 一、中石油公司介绍 嘿,小伙伴们!今天咱们来聊聊大名鼎鼎的中石油。 中石油,那可是能源领域的巨无霸!它就像一座庞大的能源宝库,为我们的生活和国家的发展源源不断地输送着动力。 中石油在国内外的油气勘探…

如何优雅的薅羊毛之Flux.1免费使用还支持中文prompt

我看硅基流动,现在免费用Flux.1的模型了,就注册了一个账号 但是Flux和之前的sd一样,中文理解力有问题 换哪个模型都不成,直接换英文提示词还行 放DIFY里串一下 我看tool里没有,那就自定义一个 DIFY要求schema要满足op…

SpringCloud天机学堂:分布式任务调度

SpringCloud天机学堂:分布式任务调度 文章目录 SpringCloud天机学堂:分布式任务调度1、分布式任务调度2、分布式任务调度原理3、分布式任务调度技术对比4、XXL-JOB介绍部署调度中心定义任务注册执行器配置任务调度执行一次 1、分布式任务调度 一般的定时…

43.x86游戏实战-XXX寻找吸怪坐标

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 工具下载: 链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

( Neurocomputing,2023)Relphormer:用于知识图谱表示的关系图Transformer

Relphormer:Relational Graph Transformer for Knowledge Graph Representations 资料 论文:Relphormer:Relational Graph Transformer for Knowledge Graph Representations 代码:https://github.com/zjunlp/Relphormer 摘要 Transformer在包括自然…

提高网站并发量的有效策略有哪些?

提高网站并发量的有效策略有哪些? 1. 静态化 & 模板引擎2. 分离静态资源3. 数据库优化4. 缓存技术5. 镜像部署6. 负载均衡7. CDN加速 💖The Begin💖点点关注,收藏不迷路💖 1. 静态化 & 模板引擎 HTML静态化&a…

8月19日笔记

http隧道搭建(续) ABPTTS安装使用 一款基于 SSL 加密的 HTTP 端口转发工具,全程通信数据加密,比 reGerog 都要稳定。使用 python2 编写,但是该工具只支持 aspx 和 jsp 脚本的网站。 下载地址:https://github.com/nccgroup/ABPTT…

CentOS7上安装RabbitMQ

在 CentOS 7 上安装 RabbitMQ 需要一些步骤,包括安装必要的依赖项、启用 RabbitMQ 源以及安装 RabbitMQ 服务器。以下是详细的步骤: 1. 更新系统 首先,确保系统是最新的: sudo yum update -y2. 安装 Erlang RabbitMQ 依赖于 E…

【Python】成功解决 ModuleNotFoundError: No module named ‘PIL‘

【Python】成功解决 ModuleNotFoundError: No module named ‘PIL’ 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高…

网络安全-防火墙初步认识。

文章目录 1. 防火墙是什么?2. 防火墙的工作原理是什么?3. 防火墙的分类有哪些?4. 实战4.1 防火墙管理和实验介绍4.2 防火墙命令行初体验实验目标:实验步骤: 4.3 防火墙Web初体验实验目标:实验步骤&#xff…

[星瞳科技]OpenMV是否属于单片机?

文件系统 MicroPyhon的文件系统是FatFS。 根目录 路径都是以根目录为起点。 当插入sd卡后,根目录就是SD卡;不插入sd卡,根目录就是内置的Flash。 如果需要,你可以在SD卡上,新建一个空文件:/flash/SKIPS…

你是如何克服编程学习中的挫折感的?

编程之旅:穿越挫折的迷雾,拥抱成长的阳光 在编程的浩瀚星空中,每个人都是探索未知的宇航员,面对着无尽的代码海洋和未知的Bug黑洞。挫折感,这位不速之客,时常在探索的旅途中悄然降临,试图用迷茫…

使用WINUI3 编写一个小软件1 C#

本篇主要是记录安装和运行的问题。 先说安装 因为我是WIN11,所以勾了,如果你是WIN10就不用勾选11那个,但是我不确定用11要不要10那个,所以就勾了,按安装手册来的。 2、创建项目 照着选就完事了,别选错 这…

运维学习————nginx-入门及反向代理搭建

目录 一、简介 二、正向代理和反向代理 1、正向代理 作用 2、反向代理 作用 三、单机版nginx部署 1、查看环境 2、环境安装以及nginx安装 2.1、安装pcre 2.2、安装gzip模块需要 zlib 库 2.3、安装Nginx 3、启动测试 四、反向代理配置 一、简介 nginx [engine x] 是…

python人工智能002:jupyter基本使用

小知识:将jupyter修改为中文,修改用户变量, 注意是用户变量,不是系统变量 新增用户变量 变量名:LANG 变量值:zh_CN.UTF8 然后重启jupyter 上一章的软件安装完成之后,就可以创建文件夹来学习写…

[PHP]-Laravel中Group By引发的问题思考

Laravel 和 ThinkPHP 是两个不同的 PHP 框架,它们在底层使用了相同的 SQL 查询语言来与数据库交互。然而,由于框架的设计和实现方式不同,它们在生成 SQL 查询时可能会表现出一些细微的差异,包括对 GROUP BY 子句的处理。 在调用查…

OpenCV学堂 | 汇总 | 深度学习图像去模糊技术与模型

本文来源公众号“OpenCV学堂”,仅用于学术分享,侵权删,干货满满。 原文链接:汇总 | 深度学习图像去模糊技术与模型 引言 深度学习在图像去模糊领域展现出了强大的能力,通过构建复杂的神经网络模型,可以自…

基于 html5 的图书管理系统--论文pf

TOC springboot532基于 html5 的图书管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和…

ansible[自动配置]

回顾 1、mysql和python (1)不需要执行mysql_ssl_rsa_setup (2)Change_master_to.不需要get public key 2、可以使用pymysql非交互的管理mysql (1)connpymysql.connect(host,user,password,database,prot)…

您需要知道的:大模型中的算力精度FP16 vs. FP32

正如海洋中的巨浪需要广阔的海域来形成,大模型的算力需求也要求我们拓宽对现有计算资源的认识。接下来的内容将引导我们穿越技术的波涛,探索在人工智能快速发展的今天,算力如何成为推动进步的关键力量。我们将分析FP16与FP32精度选择的权衡&a…