使用 Python pandas 操纵 Excel 文件
flyfish
pandas 是 Python 中一个强大的数据处理和分析库,它提供了丰富的数据结构(如 Series 和 DataFrame)和数据操纵方法,可以或许方便地处理各种数据格式,包罗 Excel 文件。
安装 pandas
在使用 pandas 之前,需要先安装它。可以使用 pip 进行安装:
假如需要处理 Excel 文件,还需要安装 openpyxl 库(用于处理 .xlsx 文件):
数据结构
- 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' 表示使用内连接,只保存两个 DataFrame 中 ID 相同的行。
- 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'] + 5 对 Age 列的每个单位格值都加上 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. 选择多个单位格
按行和列的范围选择
可以使用 loc 或 iloc 方法按行和列的范围来选择多个单位格。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)
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |