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']
相关推荐
决战灬1 分钟前
langgraph之interrupt(事例篇)
人工智能·python·agent
IPdodo_11 分钟前
Codex 总是 Reconnecting?从 401 到响应流中断的排查方法
python·requests
京和动物医院·总院19 分钟前
2026年未央区宠物医院:如何挑选最适合您爱宠的健康守护者
大数据·人工智能·python
刘小八22 分钟前
RAG 文档切分不是越细越好:选择 Chunk Size 与 Overlap
人工智能·python·语言模型
互联网中的一颗神经元25 分钟前
小白python入门 - 23. Python 正则表达式的应用
python·正则表达式
雪碧透心凉_26 分钟前
while 循环与循环嵌套
开发语言·python
初学者,亦行者32 分钟前
利用pyecharts自动化绘制漏斗图保姆级教程
python·信息可视化·数据分析
乐观勇敢坚强的老彭32 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
这就是佬们吗41 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
卷无止境1 小时前
提升 Python 代码健壮性的方法大盘点
后端·python