上篇分享了如何用微博爬虫,咱举例爬了女明星江疏影的微博数据。今天就用这些数据,给大家安利一下怎么用Python实现WPS中部分Excel付费功能。

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

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}")
01-25 09:21