Python对Excel表格的操作

今天, 实现了一个对excel表格操作的技术方案.

操作的要求是:

(1)在一个目标表格(表格2)中的第2列已经有唯一标识码.第1列为凭证号, 但是是空的.

(2)在数据表格中(表格1)中有资产的信息, 其中第2列是资产的唯一标识码, 第1列是凭证号.

(3)表格2内只有部分资产.

要求:

从表格1中的找到与表格2中唯一标识码一样的资产凭证号, 将表格2中的资产凭证号填写完整.

方法:

遍历表格2中的每一行, 找到该行的唯一标识码, 然后从表格1中找到该唯一标识码的行, 将这行的凭证号赋值为表格一的当前遍历行.

需要的库

pandas 和 openpyxl

下载安装命令:

bash 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas openpyxl

代码实现

python 复制代码
import pandas as pd  
  
# 加载Excel文件  
df = pd.read_excel('表格1.xlsx', engine='openpyxl')  #打开表格1文件
df2=pd.read_excel('表格2.xlsx', engine='openpyxl')   #打开表格2文件

for index, row in df2.iterrows():  #遍历表格2中的所有行
    #print(row[1])
    #print(df.loc[df.iloc[:,1]==row.iloc[1],df.columns[0]].values[0])
    #value=df.loc[df.iloc[:,1]==row.iloc[1],df.columns[0]]
    #将当前行的第1列赋值为表格1中第2列的值与该行第2列值相同的行的第1列值
    #即:在表格1中找到第2列与当前行第2列相同的行   df.iloc[:,1]==row.iloc[1]
    #    然后获得找到的行的第1列的值    df.loc[df.iloc[:,1]==row.iloc[1],df.columns[0]].values[0]
    #    赋值给当前行的第1列 df2.loc[index,df2.columns[0]]=。。。
    df2.loc[index,df2.columns[0]]=df.loc[df.iloc[:,1]==row.iloc[1],df.columns[0]].values[0]

df2.to_excel('表格2_g.xlsx', index=False, engine='openpyxl') #将df2重新写入文件

excel操作代码知识

DataFrame

pd.read_excel函数或pd.DataFrame可以创建DataFrame对象:

python 复制代码
df = pd.read_excel('工作簿1.xlsx', engine='openpyxl')
df2 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
type(df)
type(df2)

输出:

powershell 复制代码
<class 'pandas.core.frame.DataFrame'>

选择或索引数据

DataFrame.loc和DataFrame.iloc

loc使用标签来索引;

iloc使用序号(0为开始序号)来索引.

索引行:

python 复制代码
df.loc[0]  # 行的标签就是行号, 从0开始
df.iloc[0]  

索引列:

python 复制代码
df2.loc[:,'B']
df2.iloc[:,1]

loc和iloc在切片时(如df.loc0:2, 'A'或df.iloc0:2, 0)的行为略有不同。loc的切片是包含结束标签的(左闭右闭区间),而iloc的切片是不包含结束位置的(左闭右开区间):

python 复制代码
df.loc[0:2, 'A']

上面代码输出:

powershell 复制代码
0    1
1    2
2    3
Name: A, dtype: int64
python 复制代码
df.iloc[0:2, 0]

上面代码输出:

powershell 复制代码
0    1
1    2
Name: A, dtype: int64

切片的类型是Series类: <class 'pandas.core.series.Series'>

打开excel文件

python 复制代码
dfs = pd.read_excel('工作簿1.xlsx', sheet_name=None, engine='openpyxl')

返回一个dict, 包含所有工作表;

没有sheet_name参数: 返回第一个工作表, 类型DataFrame

返回指定的一个或多个工作表: 如sheet_name='Sheet1', sheet_name='Sheet1','Sheet2', 指定一个表是返回DataFrame类型, 指定多个表时,返回dict类型

工作表使用名称索引

python 复制代码
df=dfs['Sheet1']
相关推荐
头茬韭菜3 分钟前
第 4 篇:「Fluss + Flink 集成实战」—— Catalog、Source 与 Sink
大数据·python·flink·fluss
天天爱吃肉821819 分钟前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
AC赳赳老秦21 分钟前
官方技术文档聚合实践:用 OpenClaw 批量抓取开源项目文档,构建离线可检索技术知识库
java·运维·服务器·python·信息可视化·deepseek·openclaw
Zenova EdgeOS23 分钟前
工业边缘 SDK 设计实战:从 API 到 Python/Go 多语言工程落地
python·golang·php
breeze jiang24 分钟前
Next.js App Router 全栈实战:从 SPA 的 SEO 痛点到服务端组件与 Hydration 水合机制
开发语言·javascript·ecmascript
程序员老陆28 分钟前
Qt::WidgetAttribute 常用属性详解
开发语言·qt
XLYcmy35 分钟前
pdf论文处理:CSV输出模式
数据库·python·pycharm·pdf·论文·csv·dify
苏灿烤鱼1 小时前
14MB 模型,凭什么跟 270M 对打?
javascript·python·agent
特立独行的猫a3 小时前
Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)
开发语言·windows·rust·mingw·环境搭建·llvm
m0_720245019 小时前
1543.统计好三元组(简单)
开发语言·算法