使用 Python pandas操作 Excel 文件

使用 Python pandas 操作 Excel 文件

flyfish

pandas 是 Python 中一个强大的数据处理和分析库,它提供了丰富的数据结构(如 SeriesDataFrame)和数据操作方法,能够方便地处理各种数据格式,包括 Excel 文件。

安装 pandas

在使用 pandas 之前,需要先安装它。可以使用 pip 进行安装:

bash 复制代码
pip install pandas

如果需要处理 Excel 文件,还需要安装 openpyxl 库(用于处理 .xlsx 文件):

bash 复制代码
pip install openpyxl
数据结构
  • Series:一维的带标签数组,类似于一维数组或列表。
  • DataFrame:二维的表格型数据结构,类似于 Excel 表格,由行和列组成。

例子

1. 读取 Excel 文件
python 复制代码
import pandas as pd

# 读取 Excel 文件
file_path = 'example.xlsx'
df = pd.read_excel(file_path)

# 查看数据的基本信息
print('数据基本信息:')
df.info()

# 查看数据集行数和列数
rows, columns = df.shape

if rows:
    # 数据行数大于 0 时查看数据前几行信息
    print('数据前几行信息:')
    print(df.head().to_csv(sep='\t', na_rep='nan'))
else:
    print('数据为空')

代码解释

  • pd.read_excel 用于读取 Excel 文件,返回一个 DataFrame 对象。
  • df.info() 用于查看数据的基本信息,如列名、数据类型等。
  • df.head() 用于查看数据集行数和列数。
  • df.head() 用于查看数据的前几行。
2. 写入 Excel 文件
python 复制代码
import pandas as pd

# 创建示例数据
data = {
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 35],
    '城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)

# 写入单个工作表
df.to_excel('output_single.xlsx', index=False)

# 写入多个工作表
with pd.ExcelWriter('output_multi.xlsx') as writer:
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    df.to_excel(writer, sheet_name='Sheet2', index=False)

代码解释

  • pd.DataFrame 用于创建一个 DataFrame 对象。
  • df.to_excel 用于将 DataFrame 写入 Excel 文件。index=False 表示不保存行索引。
  • pd.ExcelWriter 用于将多个 DataFrame 写入同一个 Excel 文件的不同工作表。
3. 筛选和处理数据
python 复制代码
import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('example.xlsx')

# 筛选年龄大于 30 的数据
filtered_df = df[df['年龄'] > 30]

# 保存筛选后的数据到新的 Excel 文件
filtered_df.to_excel('filtered_output.xlsx', index=False)

代码解释

  • df[df['年龄'] > 30] 用于筛选出年龄大于 30 的行。
  • filtered_df.to_excel 用于将筛选后的数据保存到新的 Excel 文件。
4. 数据排序
python 复制代码
import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('example.xlsx')

# 按年龄降序排序
sorted_df = df.sort_values(by='年龄', ascending=False)

# 保存排序后的数据到新的 Excel 文件
sorted_df.to_excel('sorted_output.xlsx', index=False)

代码解释

  • df.sort_values(by='年龄', ascending=False) 用于按年龄列降序排序。
  • sorted_df.to_excel 用于将排序后的数据保存到新的 Excel 文件。
5. 数据合并
python 复制代码
import pandas as pd

# 创建示例数据
data1 = {
    'ID': [1, 2, 3],
    '姓名': ['张三', '李四', '王五']
}
df1 = pd.DataFrame(data1)

data2 = {
    'ID': [2, 3, 4],
    '成绩': [80, 90, 70]
}
df2 = pd.DataFrame(data2)

# 合并数据
merged_df = pd.merge(df1, df2, on='ID', how='inner')

# 保存合并后的数据到新的 Excel 文件
merged_df.to_excel('merged_output.xlsx', index=False)

代码解释

  • pd.merge 用于将两个 DataFrame 按指定列(这里是 ID)进行合并。how='inner' 表示使用内连接,只保留两个 DataFrameID 相同的行。
  • merged_df.to_excel 用于将合并后的数据保存到新的 Excel 文件。

单元格操作

示例 1:修改单个单元格的值

python 复制代码
import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}
df = pd.DataFrame(data)

# 修改第 1 行(索引为 0)、'Name' 列的单元格值
df.at[0, 'Name'] = 'Alicia'

# 将修改后的 DataFrame 保存为 Excel 文件
df.to_excel('single_cell_modify.xlsx', index=False)

代码解释

  • df.at[0, 'Name'] 用于定位到第 1 行(索引从 0 开始)Name 列的单元格。
  • 通过赋值操作将该单元格的值修改为 Alicia
  • 最后使用 to_excel 方法将修改后的 DataFrame 保存为 Excel 文件。

示例 2:根据条件修改单元格的值

python 复制代码
import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}
df = pd.DataFrame(data)

# 当年龄大于 30 时,将姓名改为 'Senior'
df.loc[df['Age'] > 30, 'Name'] = 'Senior'

# 将修改后的 DataFrame 保存为 Excel 文件
df.to_excel('conditional_cell_modify.xlsx', index=False)

代码解释

  • df.loc[df['Age'] > 30, 'Name'] 用于筛选出 Age 列中值大于 30 的行,并定位到 Name 列的单元格。
  • 将这些单元格的值修改为 Senior
  • 最后保存为 Excel 文件。

示例 3:读取单个单元格的值

python 复制代码
import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('example.xlsx')

# 读取第 2 行(索引为 1)、第 1 列(索引为 0)的单元格值
cell_value = df.iat[1, 0]
print(f"第 2 行第 1 列的单元格值为: {cell_value}")

代码解释

  • df.iat[1, 0] 用于读取第 2 行(索引从 0 开始)、第 1 列的单元格值。
  • 将读取到的值存储在 cell_value 变量中并打印。

示例 4:批量修改某列单元格的值

python 复制代码
import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}
df = pd.DataFrame(data)

# 给 'Age' 列的每个单元格值加 5
df['Age'] = df['Age'] + 5

# 将修改后的 DataFrame 保存为 Excel 文件
df.to_excel('batch_cell_modify.xlsx', index=False)

代码解释

  • df['Age'] = df['Age'] + 5Age 列的每个单元格值都加上 5。
  • 最后保存修改后的 DataFrame 为 Excel 文件。

示例 5:在特定单元格插入公式

python 复制代码
import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Num1': [1, 2, 3],
    'Num2': [4, 5, 6]
}
df = pd.DataFrame(data)

# 在新的 'Sum' 列的每个单元格插入求和公式
df['Sum'] = '=A' + (df.index + 2).astype(str) + '+B' + (df.index + 2).astype(str)

# 将修改后的 DataFrame 保存为 Excel 文件
df.to_excel('formula_insert.xlsx', index=False)

代码解释

  • 首先创建一个包含两列数值的 DataFrame
  • 然后创建一个新的 Sum 列,通过字符串拼接的方式为每个单元格插入求和公式(这里假设 Excel 中 Num1 对应 A 列,Num2 对应 B 列)。
  • 最后将 DataFrame 保存为 Excel 文件,在 Excel 中打开该文件时,这些公式会自动计算结果。

操作多个单元格

1. 选择多个单元格

按行和列的范围选择

可以使用 lociloc 方法按行和列的范围来选择多个单元格。loc 基于标签(行索引名和列名)进行选择,iloc 基于整数位置进行选择。

python 复制代码
import pandas as pd

# 创建示例 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'Score': [85, 90, 78, 92]
}
df = pd.DataFrame(data)

# 使用 loc 按标签选择第 1 行到第 2 行,'Name' 列到 'Age' 列的单元格
selected_loc = df.loc[0:1, 'Name':'Age']
print("使用 loc 选择的单元格:")
print(selected_loc)

# 使用 iloc 按整数位置选择第 1 行到第 2 行,第 0 列到第 1 列的单元格
selected_iloc = df.iloc[0:2, 0:2]
print("\n使用 iloc 选择的单元格:")
print(selected_iloc)
按条件选择

可以根据某些条件筛选出满足条件的多个单元格。

python 复制代码
# 选择 Age 大于 30 的所有行的 'Name' 和 'Age' 列单元格
selected_condition = df.loc[df['Age'] > 30, ['Name', 'Age']]
print("\n按条件选择的单元格:")
print(selected_condition)

2. 修改多个单元格的值

批量修改指定范围的值
python 复制代码
# 将第 1 行到第 2 行,'Age' 列的单元格值都修改为 28
df.loc[0:1, 'Age'] = 28
print("\n修改指定范围单元格后的数据:")
print(df)
根据条件修改多个单元格的值
python 复制代码
# 将 Age 大于 30 的行的 'Score' 列单元格值都加 5
df.loc[df['Age'] > 30, 'Score'] = df.loc[df['Age'] > 30, 'Score'] + 5
print("\n根据条件修改单元格后的数据:")
print(df)

3. 填充多个单元格

使用固定值填充
python 复制代码
# 将第 1 行到第 3 行,'Score' 列的单元格用值 80 填充
df.loc[0:2, 'Score'] = 80
print("\n使用固定值填充单元格后的数据:")
print(df)
使用序列填充
python 复制代码
# 用一个序列填充第 1 行到第 3 行,'Name' 列的单元格
new_names = ['Eve', 'Frank', 'Grace']
df.loc[0:2, 'Name'] = new_names
print("\n使用序列填充单元格后的数据:")
print(df)

4. 合并多个单元格的值

假设要将 Name 列和 Age 列的值合并到一个新列中。

python 复制代码
# 创建一个新列 'Info',将 'Name' 列和 'Age' 列的值合并
df['Info'] = df['Name'] + ' (' + df['Age'].astype(str) + ')'
print("\n合并单元格值后的数据:")
print(df)
相关推荐
Dxy123931021627 分钟前
Python基于BERT的上下文纠错详解
开发语言·python·bert
SiYuanFeng2 小时前
Colab复现 NanoChat:从 Tokenizer(CPU)、Base Train(CPU) 到 SFT(GPU) 的完整踩坑实录
python·colab
炸炸鱼.3 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
_深海凉_3 小时前
LeetCode热题100-颜色分类
python·算法·leetcode
AC赳赳老秦4 小时前
OpenClaw email技能:批量发送邮件、自动回复,高效处理工作邮件
运维·人工智能·python·django·自动化·deepseek·openclaw
zhaoshuzhaoshu4 小时前
Python 语法之数据结构详细解析
python
AI问答工程师4 小时前
Meta Muse Spark 的"思维压缩"到底是什么?我用 Python 复现了核心思路(附代码)
人工智能·python
zfan5205 小时前
python对Excel数据处理(1)
python·excel·pandas
小饕5 小时前
我从零搭建 RAG 学到的 10 件事
python
老歌老听老掉牙5 小时前
PyQt5+Qt Designer实战:可视化设计智能参数配置界面,告别手动布局时代!
python·qt