当前位置: 首页 > article >正文

使用 Python pandas操作 Excel 文件

使用 Python pandas 操作 Excel 文件

flyfish

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

安装 pandas

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

pip install pandas

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

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

例子

1. 读取 Excel 文件
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 文件
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. 筛选和处理数据
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. 数据排序
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. 数据合并
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:修改单个单元格的值

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:根据条件修改单元格的值

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:读取单个单元格的值

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:批量修改某列单元格的值

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:在特定单元格插入公式

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 基于整数位置进行选择。

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)
按条件选择

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

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

2. 修改多个单元格的值

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

3. 填充多个单元格

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

4. 合并多个单元格的值

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

# 创建一个新列 'Info',将 'Name' 列和 'Age' 列的值合并
df['Info'] = df['Name'] + ' (' + df['Age'].astype(str) + ')'
print("\n合并单元格值后的数据:")
print(df)

http://www.kler.cn/a/574128.html

相关文章:

  • 爬虫逆向:脱壳工具反射大师的使用详解
  • 集成的背景与LLM集成学习
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加表格空状态提示
  • 2021年高教社杯全国大学生数学建模A题——基于几何模型的“FAST”主动反射面的形状调节
  • 【漫话机器学习系列】122.相关系数(Correlation Coefficient)
  • 海南自贸港的数字先锋:树莓集团的战略布局解析
  • 基于Hadoop的热门旅游景点推荐数据分析与可视化系统(基于Django大数据技术的热门旅游景点数据分析与可视化)
  • 【连珠云弈】网页五子棋版项目测试报告
  • linux固定IP并解决虚拟机无法ping其他电脑问题
  • 2D到3D的跨越:3D技术重塑电商营销差异化!
  • 四款GIS工具箱软件解析:满足企业多样化空间数据需求
  • 机械臂路径规划方法综述(一)
  • 1236 - 二分查找
  • DeepSeek 隐私泄露?
  • [MySQL初阶]MySQL(4)基本查询
  • 嵌入式L6计算机网络
  • Windows下安装VMware Workstation 17并设置支持MacOS
  • 每日算法:洛谷B3637(动态规划)
  • 【MYSQL数据库异常处理】执行SQL语句报超时异常
  • 【RK3588嵌入式图形编程】-SDL2-裁剪和定位图像