程序媛的mac修炼手册-- 如何用Python节省WPS会员费
上篇分享了如何用微博爬虫,咱举例爬了女明星江疏影的微博数据。今天就用这些数据,给大家安利一下怎么用Python实现WPS中部分Excel付费功能。

MacOS系统自带的工具,绝大多数都非常顶,除Numbers外。当然,page比起word来,多少也是有点鸡肋的。
所以,微软Office全家桶,对有些Mac用户还是很有吸引力的。之前有人居然建议我去买个微软Surface做平板,推荐理由就是Surface原装Office全家桶😂😂我又没脑子长包,为了Office全家桶出大几千买Surface那种绣花枕头。咱可是连WPS会员费都能省则省的啊,主打一个勤俭节约!!
由于Mac自带办公工具太鸡肋,在macOS上强装Office又难兼容,所以,国产WPS成为大多数Mac用户的标配。动动小手指,下载安装,直接就运行地行云流水,只是免不了被薅会员费。
但是,凭我做数据分析经验来说,WPS免费功能可满足工作中80%的需求,剩下20%需要付费的功能嘛,咱用Python替代一下。咱就是说,要薅尽天下羊毛,让别人无毛可薅😎😎
话不多说,正式开始~
一. 读取 Excel 文件
使用 pandas 库读取 Excel ,能够快速加载 Excel 中的表格数据,pd.read_excel 函数可将其转换为数据框架(DataFrame)。以下示例代码,演示如何用 pandas 读取 Excel 文件。
import pandas as pd# 读取 Excel 文件
file_path = 'JSY.xlsx'
df = pd.read_excel(file_path)# 打印读取的数据框架
print("读取的数据框架:")
print(df)
二. 写入 Excel 文件
使用 pandas 库,将处理过的数据用 to_excel 函数写入新的 Excel 文件。参数 index=False 表示不包含行索引信息。生成的 Excel 文件名为 'output_data.xlsx'。示例代码如下:
import pandas as pd# 创建示例数据框架
data = {'微博id': ['ND3M2g3JH', 'KyEaim4wH', 'Kz4eC56Rj'],'点赞数': [11255, 30452, 15778],'转发数': [10, 8, 4]
}df = pd.DataFrame(data)# 将数据框架写入 Excel 文件
df.to_excel('output_data.xlsx', index=False)
三. 数据统计与汇总
通过pandas的统计函数,可以快速了解数据的统计信息,如均值、中位数等。
假设有一个包含销售数据的数据框架sales_data,其中包括产品销售额(sales_amount)、销售数量(quantity)和单价(unit_price)等列。使用这个数据框架来演示如何通过计算均值、中位数、众数、标准差、最小值和最大值等,来全面了解销售数据的特征,理解数据的分布、趋势和离散程度。示例代码如下:
import pandas as pd# 假设我们有一个包含销售数据的数据框架
data = {'Product': ['A', 'B', 'C', 'A', 'B', 'A'],'Sales_Amount': [100, 150, 200, 120, 180, 130],'Quantity': [5, 3, 4, 6, 2, 5],'Unit_Price': [20, 50, 50, 20, 90, 26]
}sales_data = pd.DataFrame(data)# 打印原始数据
print("原始数据:")
print(sales_data)# 统计与汇总
mean_sales_amount = sales_data['Sales_Amount'].mean()
median_quantity = sales_data['Quantity'].median()
mode_product = sales_data['Product'].mode().values[0]
std_unit_price = sales_data['Unit_Price'].std()
min_sales_amount = sales_data['Sales_Amount'].min()
max_quantity = sales_data['Quantity'].max()# 打印统计结果
print("\n统计与汇总结果:")
print(f"平均销售额:{mean_sales_amount}")
print(f"销售数量中位数:{median_quantity}")
print(f"产品销售频率最高的是:{mode_product}")
print(f"单价标准差:{std_unit_price}")
print(f"最小销售额:{min_sales_amount}")
print(f"最大销售数量:{max_quantity}")
四. 公式计算
使用 openpyxl 库,可在 Excel 中插入公式实现自动计算,并随着数据的更新而动态调整。比如,在示例中,通过循环遍历数据行,使用 Excel 公式 B(row) * C(row) 来计算 Total 列的值。示例代码如下:
from openpyxl import Workbook# 创建一个工作簿和工作表
workbook = Workbook()
sheet = workbook.active# 原始数据
data = [["Product", "Price", "Quantity", "Total"],["A", 25.5, 10, None],["B", 30.2, 8, None],
]# 将数据写入工作表
for row in data:sheet.append(row)# 添加公式计算 Total 列,Total = Price * Quantity
for row in range(2, sheet.max_row + 1):sheet[f'D{row}'] = f'B{row} * C{row}'# 保存工作簿
workbook.save("formulas.xlsx")
五. 图表绘制
使用 openpyxl 和 matplotlib 库,可将Excel数据可视化为图表,并插入到 Excel 工作表中。
在以下插入柱状图的示例中,通过创建了一个包含柱状图的 Excel 工作表。首先,使用 BarChart 创建一个柱状图对象,然后设置图表的标题、X轴标题和Y轴标题。接着,通过 Reference 定义数据范围,并使用 add_data 将数据添加到图表中。最后,使用 add_chart 将图表插入到工作表中。这样,就能够在 Excel 中通过图表直观地展示数据的分布和关系。示例代码如下:
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
import matplotlib.pyplot as plt
from io import BytesIO# 创建一个工作簿和工作表
workbook = Workbook()
sheet = workbook.active# 原始数据
data = [["Category", "Value"],["A", 25],["B", 30],["C", 20],
]# 将数据写入工作表
for row in data:sheet.append(row)# 创建柱状图
chart = BarChart()
chart.title = "Category vs Value"
chart.x_axis.title = "Category"
chart.y_axis.title = "Value"# 数据范围
data_range = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)# 设置图表数据
chart.add_data(data_range, titles_from_data=True)# 将图表插入到工作表中
sheet.add_chart(chart, "D2")# 保存工作簿
workbook.save("chart_example.xlsx")
六. 批量操作
使用循环和函数,可对数据进行批量处理。以下示例代码,使用循环遍历数据行,并批量计算了 'Total' 列的值:
from openpyxl import Workbook# 创建一个工作簿和工作表
workbook = Workbook()
sheet = workbook.active# 原始数据
data = [["Product", "Price", "Quantity", "Total"],["A", 25.5, 10, None],["B", 30.2, 8, None],
]# 将数据写入工作表
for row in data:sheet.append(row)# 批量计算 Total 列的值(Total = Price * Quantity)
for row in range(2, sheet.max_row + 1):price = sheet[f'B{row}'].valuequantity = sheet[f'C{row}'].valuetotal = price * quantitysheet[f'D{row}'] = total# 打印批量计算后的数据
print("批量计算后的数据:")
for row in sheet.iter_rows(values_only=True):print(row)# 保存工作簿
workbook.save("batch_operations.xlsx")
七. 错误处理
在处理 Excel 数据时,错误是不可避免的。为了提高代码的健壮性,可以使用异常处理机制来处理可能出现的错误。以下示例代码,使用了两层异常处理。外层的异常处理捕获了可能发生的任何异常,而内层的异常处理仅捕获特定的 TypeError,这是由于在计算 'Total' 列时可能遇到的错误类型。
from openpyxl import Workbooktry:# 创建一个工作簿和工作表workbook = Workbook()sheet = workbook.active# 原始数据data = [["Product", "Price", "Quantity", "Total"],["A", 25.5, 10, None],["B", 30.2, 8, None],]# 将数据写入工作表for row in data:sheet.append(row)# 尝试计算 Total 列的值,但存在空值导致的错误for row in range(2, sheet.max_row + 1):try:price = sheet[f'B{row}'].valuequantity = sheet[f'C{row}'].valuetotal = price * quantitysheet[f'D{row}'] = totalexcept TypeError as e:print(f"Error in row {row}: {e}")# 打印处理后的数据print("处理后的数据:")for row in sheet.iter_rows(values_only=True):print(row)# 保存工作簿workbook.save("error_handling_example.xlsx")except Exception as e:print(f"An error occurred: {e}")
相关文章:
程序媛的mac修炼手册-- 如何用Python节省WPS会员费
上篇分享了如何用微博爬虫,咱举例爬了女明星江疏影的微博数据。今天就用这些数据,给大家安利一下怎么用Python实现WPS中部分Excel付费功能。 MacOS系统自带的工具,绝大多数都非常顶,除Numbers外。当然,page比起word来&…...
ASP.NET Core NE8实现HTTP Upgrade和HTTP CONNECT代理服务器
看到一个文章[Go] 不到 100 行代码实现一个支持 CONNECT 动词的 HTTP 服务器 在NET8中如何实现 创建项目为MiniApi 编辑Program.cs文件。 var builder WebApplication.CreateSlimBuilder(args);var app builder.Build();// 将HTTP请求通过协议升级机制转为远程TCP请求&…...
apipost和curl收不到服务器响应的HTTP/1.1 404 Not Found
windows的apipost发送请求后,服务器响应了HTTP/1.1 404 Not Found,但是apipost一直显示发送中。 linux上的curl也一样。 使用wireshark抓包发现收到了响应,但是wireshark识别不了(图中是回应404后关闭了连接)ÿ…...
javascript:计算一个坐标数组的最小值点、最大值点、中心点
作者:CSDN _乐多_ 本文将介绍使用 javascript 语言计算一个坐标数组的最小值点、最大值点、中心点的代码。 文章目录 一、代码 一、代码 function calculateCenterPoint(points) {if (points.length 0) {return null;}let sumX 0;let sumY 0;let sumZ 0;for …...
使用远程工具连接Linux系统——使用Root用户登录
1、启动虚拟机,输入以下命令 进入root用户 sudo su或 su root修改ssh配置文件 vim /etc/ssh/sshd_config找到PermitRootLogin 并用#注释掉当前行 # PermitRootLogin prohibit-password添加: PermitRootLogin yes键入esc输入:wq保存退出 2、重启服…...
JuiceSSH结合内网穿透实现移动端设备公网远程访问Linux虚拟机
文章目录 1. Linux安装cpolar2. 创建公网SSH连接地址3. JuiceSSH公网远程连接4. 固定连接SSH公网地址5. SSH固定地址连接测试 处于内网的虚拟机如何被外网访问呢?如何手机就能访问虚拟机呢? cpolarJuiceSSH 实现手机端远程连接Linux虚拟机(内网穿透,手机端连接Linux虚拟机) …...
06-枚举和模式匹配
上一篇:05-使用结构体构建相关数据 在本章中,我们将介绍枚举。枚举允许你通过枚举其可能的变体来定义一种类型。首先,我们将定义并使用一个枚举,以展示枚举如何与数据一起编码意义。接下来,我们将探索一个特别有用的枚…...
【C/C++】C/C++编程——C++ 开发环境搭建
C的开发环境种类繁多,以下是一些常见的C 集成开发环境: AppCode :构建与JetBrains’ IntelliJ IDEA 平台上的用于Objective-C,C,C,Java和Java开发的集成开发环境CLion:来自JetBrains的跨平台的C/C的集成开…...
Go 接口
接口概览 接口大概理解 接口类型是队其他类型行为的概括与抽象 接口类型中,包含函数声明,但没有数据变量接口的作用通过使用接口,可以写出更加灵活和通用的函数,这些函数不用绑定在一个特定的类型实现上Go 接口特征 很多面向对象…...
用 AI 将自拍照 P 进不同艺术作品,谷歌发布「艺术自拍 2」
1 月 24 日消息,谷歌旗下「艺术与文化」应用今日宣布,2018 年推出的「艺术自拍」功能在时隔近六年后,借助生成式 AI 的力量回归。官方表示,「艺术自拍 2」将再次使用户与艺术面对面,重新探访世界各地的艺术、历史和文化…...
SpringSecurity+OAuth2.0 搭建认证中心和资源服务中心
目录 1. OAuth2.0 简介 2. 代码搭建 2.1 认证中心(8080端口) 2.2 资源服务中心(8081端口) 3. 测试结果 1. OAuth2.0 简介 OAuth 2.0(开放授权 2.0)是一个开放标准,用于授权第三方应用程序…...
c# 策略模式
在 C# 中,策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到具有公共接口的独立类中,使得它们可以互相替换。这样可以使得算法的选择独立于算法的使用者,从而提高了灵活性和可维护性。 以下是策略…...
消息队列RabbitMQ.03.死信交换机的讲解与使用
目录 一、死信队列(延迟队列) 概念讲解 二、确认消息(局部方法处理消息) 三、代码实战 1.编写生产者代码,配置消息、直连交换机、路由键 1.1代码解析: 2.配置消费者接受类接受直连交换机的路由键 2.1. String msgÿ…...
人工智能原理实验4(2)——贝叶斯、决策求解汽车评估数据集
🧡🧡实验内容🧡🧡 汽车数据集 车子具有 buying,maint,doors,persons,lug_boot and safety六种属性,而车子的好坏分为uncc,ucc,good and vgood四种。 🧡🧡贝叶斯求解🧡🧡…...
算力网络:未来计算资源的驱动力
文章目录 前言一、算力网络的基本概况(一)算力网络的基本概念(二)算力网络研究进展二、运营商的算力网络架构(一)算力网络基础设施构成(二)算力网络编排管理(三)能力开放三、算力网络的优势(一)弹性计算(二)降低成本(三)去中心化四、算力网络的应用场景(一)人…...
java动态导入excel按照表头生成数据库表
1、创建接口接收文件 //controller层 PostMapping("/importExcel1")public void importExcel1(HttpServletRequest request, MultipartFile file) {try {waterMeterService.importExcel1(request,file);} catch (Exception e) {throw new RuntimeException(e);}}//se…...
Java 集合List相关面试题
📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于java面试题系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基…...
k8s-基础知识(Pod,Deployment,ReplicaSet)
k8s职责 自动化容器部署和复制随时扩展或收缩容器容器分组group,并且提供容器间的负载均衡实时监控,即时故障发现,自动替换 k8s概念及架构 pod pod是容器的容器,可以包含多个container pod是k8s最小可部署单元,容器…...
matlab查看源代码
matlab函数源代码-查看 CtrlD 最简单方便的一种方法,鼠标划中函数名,按CTRLD即可打开函数的m文件...
【数据库学习】PostgreSQL优化
1,思路 2,执行计划 explain sql语句; #查看执行计划。也可以使用navicat的解释功能查看。结果说明: QUERY PLAN Index Scan using tenk1_unique1 on tenk1 (cost0.00..10.01 rows1 width244) --Index 使用索引 --cost&#x…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
