上篇分享了如何用微博爬虫,咱举例爬了女明星江疏影的微博数据。今天就用这些数据,给大家安利一下怎么用Python实现WPS中部分Excel付费功能。
MacOS系统自带的工具,绝大多数都非常顶,除Numbers外。当然,page比起word来,多少也是有点鸡肋的。
所以,微软Office全家桶,对有些Mac用户还是很有吸引力的。之前有人居然建议我去买个微软Surface做平板,推荐理由就是Surface原装Office全家桶我又没脑子长包,为了Office全家桶出大几千买Surface那种绣花枕头。咱可是连WPS会员费都能省则省的啊,主打一个勤俭节约!!
由于Mac自带办公工具太鸡肋,在macOS上强装Office又难兼容,所以,国产WPS成为大多数Mac用户的标配。动动小手指,下载安装,直接就运行地行云流水,只是免不了被薅会员费。
但是,凭我做数据分析经验来说,WPS免费功能可满足工作中80%的需求,剩下20%需要付费的功能嘛,咱用Python替代一下。咱就是说,要薅尽天下羊毛,让别人无毛可薅
话不多说,正式开始~
使用 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)
使用 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}")