程序媛的mac修炼手册-- 如何用Python节省WPS会员费

news2024/9/26 1:23:52

上篇分享了如何用微博爬虫,咱举例爬了女明星江疏影的微博数据。今天就用这些数据,给大家安利一下怎么用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}'].value
    quantity = sheet[f'C{row}'].value
    total = price * quantity
    sheet[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 Workbook

try:
    # 创建一个工作簿和工作表
    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}'].value
            quantity = sheet[f'C{row}'].value
            total = price * quantity
            sheet[f'D{row}'] = total
        except 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}")

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

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

相关文章

ubuntu 22.04 安装mysql-8.0.34

ubuntu 22.04 安装mysql-8.0.34 1、基础安装配置 更新软件包: sudo apt update查看可用软件包: sudo apt search mysql-server安装最新版本: sudo apt install -y mysql-server或者,安装指定版本: sudo apt inst…

vue3实现在浏览器之外打开新窗口,新窗口只有原来的一半并且居中显示

首先在router下的index.js添加路由地址 {name: attribute,path: /attribute,component: () > import(../views/attribute.vue)},然后在方法中调用 //点击按钮 function clicek() {openCenteredWindow(/attribute, 1400, 800);} // 计算居中位置function calculateCenterPos…

live555在拉流时应对多路码流传输带宽问题的几种处理思路

处理带宽管理和调整的机制 Live555库本身并没有直接处理带宽管理和调整的机制,因为它主要是一个用于实现RTSP流媒体服务器和客户端的库,而带宽管理通常是在应用层进行处理的。但Live555支持一些基础协议,这些协议可以在应对带宽问题时进行使用…

qt初入门6:QChar和QString相关接口练习

简单了解编码: ​ latin1(ISO 8859-1)字符集是对ASCII基本字符集的扩展,都是1字节编码。 Unicode编码有多重存储方案,utf-8使用1~4字节编码,最少1字节;utf-16使用2-4字节编码,最少2字…

Zabbix 整合 Prometheus:案例分享与操作指南

一、简介 Zabbix 和 Prometheus 都是流行的开源监控工具,它们各自具有独特的优势。Zabbix 主要用于网络和系统监控,而 Prometheus 则专注于开源的分布式时间序列数据库。在某些场景下,将这两个工具整合在一起可以更好地发挥它们的优势&#…

树,二叉树及其相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&#…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…

redis集群 —— 高性能

文章目录 前言节点1.1 启动节点 槽指派2.1 记录节点的槽指派信息2.2 传播节点的槽指派信息2.3 记录集群所有槽的指派信息 在集群中执行命令3.1 计算键属于哪个槽3.3 节点数据库的实现 重新分片复制与故障转移 前言 Redis集群是Redis提供的分布式数据库方案,集群通过…

vp9协议笔记

vp9协议笔记📒 本文主要是对vp9协议的梳理,协议的细节参考官方文档:VP9协议链接(需要加速器) vp9协议笔记 vp9协议笔记📒1. 视频编码概述2. 超级帧superframe(sz):2. fr…

ZK高可用架构涉及常用功能整理

ZK高可用架构涉及常用功能整理 1. zk的高可用系统架构和相关组件1.1 Quorum机制1.2 ZAB协议 2. zk的核心参数2.1 常规配置2.2 特殊优化配置 3. zk常用命令3.1 常用基础命令3.2 常用运维命令 4. 事务性4.1 数据写流程4.2 数据读流程 5. 疑问和思考5.1 zk不擅长处理哪些场景&…

springboot家乡特色推荐系统源码和论文

在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括家乡特色推荐的网络应用,在外国家乡特色推荐系统已经是很普遍的方式,不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&#xff0…

橘子学Mybatis08之Mybatis关于一级缓存的使用和适配器设计模式

前面我们说了mybatis的缓存设计体系,这里我们来正式看一下这玩意到底是咋个用法。 首先我们是知道的,Mybatis中存在两级缓存。分别是一级缓存(会话级),和二级缓存(全局级)。 下面我们就来看看这两级缓存。 一、准备工作 1、准备数据库 在此之…

HCIP:不同VLAN下实现网络互相通信

配置pc1 配置pc2 配置pc3 将sw1划分到vlan3 将sw3划分到vlan3 在sw1上进行缺省 将sw1上(g0/0/1)的untagged改成 1 3 则在pc1上ping pc2可通 在sw1上进行缺省 在sw3上(e0/0/1)打标记 则在pc1上ping pc3可通(实现互通&am…

阿里云Serverless 容器使用,以及常见问题处理

阿里云Serverless Kubernetes容器服务(ASK)是基于Kubernetes的Serverless容器产品,能够自动完成资源管理、弹性伸缩和按需计费。以下是一些基本使用步骤以及常见问题处理: 阿里云Serverless Kubernetes(ASK&#xff0…

17.鸿蒙HarmonyOS App(JAVA)滑动选择器

每天进步一点点,成功在久不在速 滑动选择器 //设置文本样式 picker.setNormalTextFont(Font.DEFAULT_BOLD); picker.setNormalTextSize(40); picker.setNormalTextColor(new Color(Color.getIntColor("#FFA500"))); picker.setSelectedTextFont(Font.DEFAULT_BOLD)…

socket通信客户端收到16进制转换出现efbfbd乱码解决办法

socket客户端接收服务端发来的数据时,发现老有efbfbd乱码,如下图,服务端发送的是02040200013CF0,但是客户端接收到解析后却不一样 客户端接收解析并打印 在网上查原因后,原因是将接收的byte数组转换为String后&#…

C++:第十三讲BFS广度优先搜索

前言 今天带领大家学一下BFS。 DFS可以看——C:第十二讲DFS深搜(二)_c匿名函数dfs-CSDN博客 BFS简介 广度优先搜索(breadth-first search,缩写为bfs)又名宽度优先搜索,是最简便的图的搜索算法之一&…

Conda python运行的包和环境管理 入门

Conda系列: 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装 Conda 是一个功能强大的命令行工具,用于在 Windows、macOS 和 Linux 上运行的包和环境管理。 本 conda 入门指南介绍了启动和使用 conda 创建环境和安装包的基础知识。 1. 准备…

优先级队列(堆) PriorityQueue

🎥 个人主页:Dikz12📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 1.优先级队列 2.优先级队列的模拟实现 2.1 堆的概念 2.2 堆的创建 2.3 堆的插入和删除 2.…

基于openssl v3搭建ssl安全加固的c++ tcpserver

1 概述 tcp server和tcp client同时使用openssl库,可对通信双方流通的字节序列进行加解密,保障通信的安全。本文以c编写的tcp server和tcp client为例子,openssl的版本为v3。 2 安装openssl v3 2.1 安装 perl-IPC-Cmd openssl项目中的co…