使用 Python pandas操纵 Excel 文件

打印 上一主题 下一主题

主题 977|帖子 977|积分 2931

使用 Python pandas 操纵 Excel 文件

flyfish
pandas 是 Python 中一个强大的数据处理和分析库,它提供了丰富的数据结构(如 Series 和 DataFrame)和数据操纵方法,可以或许方便地处理各种数据格式,包罗 Excel 文件。
安装 pandas

在使用 pandas 之前,需要先安装它。可以使用 pip 进行安装:
  1. pip install pandas
复制代码
假如需要处理 Excel 文件,还需要安装 openpyxl 库(用于处理 .xlsx 文件):
  1. pip install openpyxl
复制代码
数据结构



  • Series:一维的带标签数组,雷同于一维数组或列表。
  • DataFrame:二维的表格型数据结构,雷同于 Excel 表格,由行和列构成。
例子

1. 读取 Excel 文件

  1. import pandas as pd
  2. # 读取 Excel 文件
  3. file_path = 'example.xlsx'
  4. df = pd.read_excel(file_path)
  5. # 查看数据的基本信息
  6. print('数据基本信息:')
  7. df.info()
  8. # 查看数据集行数和列数
  9. rows, columns = df.shape
  10. if rows:
  11.     # 数据行数大于 0 时查看数据前几行信息
  12.     print('数据前几行信息:')
  13.     print(df.head().to_csv(sep='\t', na_rep='nan'))
  14. else:
  15.     print('数据为空')
复制代码
代码解释


  • pd.read_excel 用于读取 Excel 文件,返回一个 DataFrame 对象。
  • df.info() 用于检察数据的基本信息,如列名、数据范例等。
  • df.head() 用于检察数据集行数和列数。
  • df.head() 用于检察数据的前几行。
2. 写入 Excel 文件

  1. import pandas as pd
  2. # 创建示例数据
  3. data = {
  4.     '姓名': ['张三', '李四', '王五'],
  5.     '年龄': [25, 30, 35],
  6.     '城市': ['北京', '上海', '广州']
  7. }
  8. df = pd.DataFrame(data)
  9. # 写入单个工作表
  10. df.to_excel('output_single.xlsx', index=False)
  11. # 写入多个工作表
  12. with pd.ExcelWriter('output_multi.xlsx') as writer:
  13.     df.to_excel(writer, sheet_name='Sheet1', index=False)
  14.     df.to_excel(writer, sheet_name='Sheet2', index=False)
复制代码
代码解释


  • pd.DataFrame 用于创建一个 DataFrame 对象。
  • df.to_excel 用于将 DataFrame 写入 Excel 文件。index=False 表示不生存行索引。
  • pd.ExcelWriter 用于将多个 DataFrame 写入同一个 Excel 文件的差别工作表。
3. 筛选和处理数据

  1. import pandas as pd
  2. # 读取 Excel 文件
  3. df = pd.read_excel('example.xlsx')
  4. # 筛选年龄大于 30 的数据
  5. filtered_df = df[df['年龄'] > 30]
  6. # 保存筛选后的数据到新的 Excel 文件
  7. filtered_df.to_excel('filtered_output.xlsx', index=False)
复制代码
代码解释


  • df[df['年龄'] > 30] 用于筛选出年龄大于 30 的行。
  • filtered_df.to_excel 用于将筛选后的数据生存到新的 Excel 文件。
4. 数据排序

  1. import pandas as pd
  2. # 读取 Excel 文件
  3. df = pd.read_excel('example.xlsx')
  4. # 按年龄降序排序
  5. sorted_df = df.sort_values(by='年龄', ascending=False)
  6. # 保存排序后的数据到新的 Excel 文件
  7. sorted_df.to_excel('sorted_output.xlsx', index=False)
复制代码
代码解释


  • df.sort_values(by='年龄', ascending=False) 用于按年龄列降序排序。
  • sorted_df.to_excel 用于将排序后的数据生存到新的 Excel 文件。
5. 数据归并

  1. import pandas as pd
  2. # 创建示例数据
  3. data1 = {
  4.     'ID': [1, 2, 3],
  5.     '姓名': ['张三', '李四', '王五']
  6. }
  7. df1 = pd.DataFrame(data1)
  8. data2 = {
  9.     'ID': [2, 3, 4],
  10.     '成绩': [80, 90, 70]
  11. }
  12. df2 = pd.DataFrame(data2)
  13. # 合并数据
  14. merged_df = pd.merge(df1, df2, on='ID', how='inner')
  15. # 保存合并后的数据到新的 Excel 文件
  16. merged_df.to_excel('merged_output.xlsx', index=False)
复制代码
代码解释


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

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

  1. import pandas as pd
  2. # 创建一个简单的 DataFrame
  3. data = {
  4.     'Name': ['Alice', 'Bob', 'Charlie'],
  5.     'Age': [25, 30, 35]
  6. }
  7. df = pd.DataFrame(data)
  8. # 修改第 1 行(索引为 0)、'Name' 列的单元格值
  9. df.at[0, 'Name'] = 'Alicia'
  10. # 将修改后的 DataFrame 保存为 Excel 文件
  11. df.to_excel('single_cell_modify.xlsx', index=False)
复制代码
代码解释


  • df.at[0, 'Name'] 用于定位到第 1 行(索引从 0 开始)Name 列的单位格。
  • 通过赋值操纵将该单位格的值修改为 Alicia。
  • 末了使用 to_excel 方法将修改后的 DataFrame 生存为 Excel 文件。
示例 2:根据条件修改单位格的值

  1. import pandas as pd
  2. # 创建一个简单的 DataFrame
  3. data = {
  4.     'Name': ['Alice', 'Bob', 'Charlie'],
  5.     'Age': [25, 30, 35]
  6. }
  7. df = pd.DataFrame(data)
  8. # 当年龄大于 30 时,将姓名改为 'Senior'
  9. df.loc[df['Age'] > 30, 'Name'] = 'Senior'
  10. # 将修改后的 DataFrame 保存为 Excel 文件
  11. df.to_excel('conditional_cell_modify.xlsx', index=False)
复制代码
代码解释


  • df.loc[df['Age'] > 30, 'Name'] 用于筛选出 Age 列中值大于 30 的行,并定位到 Name 列的单位格。
  • 将这些单位格的值修改为 Senior。
  • 末了生存为 Excel 文件。
示例 3:读取单个单位格的值

  1. import pandas as pd
  2. # 读取 Excel 文件
  3. df = pd.read_excel('example.xlsx')
  4. # 读取第 2 行(索引为 1)、第 1 列(索引为 0)的单元格值
  5. cell_value = df.iat[1, 0]
  6. print(f"第 2 行第 1 列的单元格值为: {cell_value}")
复制代码
代码解释


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

  1. import pandas as pd
  2. # 创建一个简单的 DataFrame
  3. data = {
  4.     'Name': ['Alice', 'Bob', 'Charlie'],
  5.     'Age': [25, 30, 35]
  6. }
  7. df = pd.DataFrame(data)
  8. # 给 'Age' 列的每个单元格值加 5
  9. df['Age'] = df['Age'] + 5
  10. # 将修改后的 DataFrame 保存为 Excel 文件
  11. df.to_excel('batch_cell_modify.xlsx', index=False)
复制代码
代码解释


  • df['Age'] = df['Age'] + 5 对 Age 列的每个单位格值都加上 5。
  • 末了生存修改后的 DataFrame 为 Excel 文件。
示例 5:在特定单位格插入公式

  1. import pandas as pd
  2. # 创建一个简单的 DataFrame
  3. data = {
  4.     'Num1': [1, 2, 3],
  5.     'Num2': [4, 5, 6]
  6. }
  7. df = pd.DataFrame(data)
  8. # 在新的 'Sum' 列的每个单元格插入求和公式
  9. df['Sum'] = '=A' + (df.index + 2).astype(str) + '+B' + (df.index + 2).astype(str)
  10. # 将修改后的 DataFrame 保存为 Excel 文件
  11. df.to_excel('formula_insert.xlsx', index=False)
复制代码
代码解释


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

1. 选择多个单位格

按行和列的范围选择

可以使用 loc 或 iloc 方法按行和列的范围来选择多个单位格。loc 基于标签(行索引名和列名)进行选择,iloc 基于整数位置进行选择。
  1. import pandas as pd
  2. # 创建示例 DataFrame
  3. data = {
  4.     'Name': ['Alice', 'Bob', 'Charlie', 'David'],
  5.     'Age': [25, 30, 35, 40],
  6.     'Score': [85, 90, 78, 92]
  7. }
  8. df = pd.DataFrame(data)
  9. # 使用 loc 按标签选择第 1 行到第 2 行,'Name' 列到 'Age' 列的单元格
  10. selected_loc = df.loc[0:1, 'Name':'Age']
  11. print("使用 loc 选择的单元格:")
  12. print(selected_loc)
  13. # 使用 iloc 按整数位置选择第 1 行到第 2 行,第 0 列到第 1 列的单元格
  14. selected_iloc = df.iloc[0:2, 0:2]
  15. print("\n使用 iloc 选择的单元格:")
  16. print(selected_iloc)
复制代码
按条件选择

可以根据某些条件筛选出满足条件的多个单位格。
  1. # 选择 Age 大于 30 的所有行的 'Name' 和 'Age' 列单元格
  2. selected_condition = df.loc[df['Age'] > 30, ['Name', 'Age']]
  3. print("\n按条件选择的单元格:")
  4. print(selected_condition)
复制代码
2. 修改多个单位格的值

批量修改指定范围的值

  1. # 将第 1 行到第 2 行,'Age' 列的单元格值都修改为 28
  2. df.loc[0:1, 'Age'] = 28
  3. print("\n修改指定范围单元格后的数据:")
  4. print(df)
复制代码
根据条件修改多个单位格的值

  1. # 将 Age 大于 30 的行的 'Score' 列单元格值都加 5
  2. df.loc[df['Age'] > 30, 'Score'] = df.loc[df['Age'] > 30, 'Score'] + 5
  3. print("\n根据条件修改单元格后的数据:")
  4. print(df)
复制代码
3. 添补多个单位格

使用固定值添补

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

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

假设要将 Name 列和 Age 列的值归并到一个新列中。
  1. # 创建一个新列 'Info',将 'Name' 列和 'Age' 列的值合并
  2. df['Info'] = df['Name'] + ' (' + df['Age'].astype(str) + ')'
  3. print("\n合并单元格值后的数据:")
  4. print(df)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表