pandas 实现 Excel 常见操作 (2)

本文详细介绍Pandas库在数据统计分析中的应用,包括计算合计数、分类汇总、数据格式化及数据透视表的创建。Pandas提供强大的数据处理功能,如使用groupby()函数进行分类汇总,以及通过pivot_table()方法创建数据透视表,这些功能远超Excel的数据分析能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接下来介绍 pandas 的基本操作中,大体相当于 Excel 的合计、小计 (subtotal) 和数据透视表的方法。pandas 的数据统计功能比 Excel 强大很多,方式也更加灵活。Excel 问题之一就是数据的存储和显示不分离,而 pandas 和数据库处理方式类似,数据的存储和显示分离。

计算合计数

使用上一篇的 Excel 文件作为分析的数据源,假如需要对各个月份以及月份合计数进行求和。pandas 可以对 Series 运行 sum() 方法来计算合计:

import pandas as pd
import numpy as np

df = pd.read_excel('http://pbpython.com/extras/excel-comp-data.xlsx');
df['Total'] = df.Jan + df.Feb + df.Mar

# sum_row 的类型是 pandas.core.series.Series, Jan, Feb 等成为 Series 的 index
sum_row = df[['Jan', 'Feb', 'Mar', 'Total']].sum()

也可以将 sum_row 转换成 DataFrame, 以列的方式查看。DataFrameT 方法实现行列互换。

# 转置变成 DataFrame
df_sum = pd.DataFrame(data=sum_row).T
df_sum

如果想要把合计数放在数据的下方,则要稍作加工。首先通过 reindex() 函数将 df_sum 变成与 df 具有相同的列,然后再通过 append() 方法,将合计行放在数据的后面:

# 转置变成 DataFrame
df_sum = pd.DataFrame(data=sum_row).T

# 将 df_sum 添加到 df
df_sum = df_sum.reindex(columns=df.columns)

# append 创建一个新的 DataFrame
df_with_total = df.append(df_sum, ignore_index=True)

分类汇总

Excel 的分类汇总功能,在数据功能区,但因为分类汇总需要对数据进行排序,并且分类汇总的数据与明细数据混在一起,个人很少用到,分类汇总一般使用数据透视表。

而在 pandas 进行分类汇总,可以使用 DataFramegroupby() 函数,然后再对 groupby() 生成的 pandas.core.groupby.DataFrameGroupBy 对象进行求和:

df_groupby = df[['state','Jan', 'Feb','Mar', 'Total']].groupby('state').sum()
df_groupby.head()

数据格式化

pandas 默认的数据显示,没有使用千分位分隔符,在数据较大时,感觉不方便。如果需要对数据的显示格式化,可以自定义一个函数 number_format(),然后对 DataFrame 运行 applymap(number_format) 函数。applymap() 函数对 DataFrame 中每一个元素都运行 number_format 函数。number_format 函数接受的参数必须为标量值,返回的也是标量值。

# 数字格式化
def number_format(x):
    return "{:,.0f}".format(x) # 使用逗号分隔,没有小数位

formated_df = df_groupby.applymap(number_format)
formated_df.head()

数据透视表

pandas 运行数据透视表,使用 pivot_table() 方法。熟练使用 pivot_table() 需要一些练习。这里只是介绍最基本的功能:

  • index 参数: 按什么条件进行汇总
  • values 参数:对哪些数据进行计算
  • aggfunc 参数:aggregation function,执行什么运算
# pivot table
# pd.pivot_table 生成一个新的 DataFrame
df_pivot = pd.pivot_table(df, index=['state'], values=['Jan','Feb','Mar','Total'], aggfunc= np.sum)

<think>好的,我现在要帮助用户解决如何使用Pandas进行Excel文件的读写操作。首先,我需要回忆一下Pandas的相关函数,比如read_excel和to_excel。用户可能需要基础的代码示例,所以得先准备一个简单的读写流程。 接下来,我应该检查用户提供的引用内容,看看有没有可以直接参考的信息。引用2提到Pandas提供了操作Excel的函数,特别是to_excel()方法。引用3和4讨论了read_excel()的参数,比如sheetname和列的选择。这些信息很重要,需要整合到回答中。 然后,我需要确保代码示例正确无误。例如,读取Excel时使用pd.read_excel('input.xlsx'),写入时使用df.to_excel('output.xlsx')。还要注意是否需要处理不同的sheet,可能需要指定sheet_name参数。 用户可能还会遇到常见问题,比如处理多个sheet或指定列。根据引用4,可以通过sheetname参数来指定特定的sheet,或者读取所有sheet返回字典。这部分需要详细说明,并提供示例代码。 此外,安装依赖库也是一个关键点。必须提醒用户安装pandas和openpyxl,尤其是处理.xlsx文件时。代码示例中应该包含安装命令,方便用户直接复制。 最后,生成相关问题时要覆盖性能优化、大数据处理、样式修改以及与其他库的对比,这些都是用户可能进一步关心的主题。确保问题与Pandas处理Excel相关,并且有足够的深度。 总结步骤:安装库、读取Excel、数据处理、写入Excel、高级用法、注意事项。每个步骤都要简洁明了,代码示例要完整,避免错误。同时,引用相关的参考资料,帮助用户进一步查阅。</think>以下是使用Pandas实现Excel文件读写操作的详细步骤及代码示例: --- ### 一、基础读写操作 #### 1. 安装依赖库 ```bash # 安装pandasExcel处理引擎 pip install pandas openpyxl xlsxwriter ``` #### 2. 读取Excel文件 ```python import pandas as pd # 读取整个Excel文件 df = pd.read_excel("input.xlsx", sheet_name="Sheet1") # 指定sheet名称或索引[^3] # 读取指定列(例如A列和C列) df = pd.read_excel("input.xlsx", usecols=["A", "C"]) # 通过列名或索引选择[^4] ``` #### 3. 写入Excel文件 ```python # 创建DataFrame示例 data = {"Name": ["Alice", "Bob"], "Age": [25, 30]} df = pd.DataFrame(data) # 写入Excel文件 df.to_excel("output.xlsx", index=False, sheet_name="Users") # index=False去除行号[^2] ``` --- ### 二、高级操作 #### 1. 处理多个Sheet ```python # 读取所有Sheet返回字典 all_sheets = pd.read_excel("input.xlsx", sheet_name=None) # 写入多个Sheet with pd.ExcelWriter("output.xlsx") as writer: df1.to_excel(writer, sheet_name="Sheet1") df2.to_excel(writer, sheet_name="Sheet2") ``` #### 2. 修改现有Excel文件 ```python # 读取并修改数据 df = pd.read_excel("input.xlsx") df["New_Column"] = df["Age"] * 2 # 追加写入原文件(需openpyxl引擎) with pd.ExcelWriter("input.xlsx", mode="a", engine="openpyxl") as writer: df.to_excel(writer, sheet_name="Updated_Data") ``` --- ### 三、注意事项 1. **文件格式支持** - `.xlsx`需`openpyxl`引擎,`.xls`需`xlrd`引擎[^2] 2. **性能优化** 大数据集(>10万行)建议分块读取: ```python for chunk in pd.read_excel("large_file.xlsx", chunksize=1000): process(chunk) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值