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.loc[0:2, 'A']或df.iloc[0: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 小时前
IPv4地址表示法详解
开发语言·php
浊酒南街3 小时前
决策树python实现代码1
python·算法·决策树
FreedomLeo14 小时前
Python机器学习笔记(十三、k均值聚类)
python·机器学习·kmeans·聚类
星光樱梦4 小时前
32. 线程、进程与协程
python
阿正的梦工坊4 小时前
深入理解 PyTorch 的 view() 函数:以多头注意力机制(Multi-Head Attention)为例 (中英双语)
人工智能·pytorch·python
西猫雷婶4 小时前
python学opencv|读取图像(十九)使用cv2.rectangle()绘制矩形
开发语言·python·opencv
liuxin334455665 小时前
学籍管理系统:实现教育管理现代化
java·开发语言·前端·数据库·安全
海绵波波1075 小时前
flask后端开发(10):问答平台项目结构搭建
后端·python·flask
码农W5 小时前
QT--静态插件、动态插件
开发语言·qt
ke_wu5 小时前
结构型设计模式
开发语言·设计模式·组合模式·简单工厂模式·工厂方法模式·抽象工厂模式·装饰器模式