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']
相关推荐
沈韶珺22 分钟前
Elixir语言的安全开发
开发语言·后端·golang
MatpyMaster42 分钟前
基于PyQt5打造的实用工具——PDF文件加图片水印,可调大小位置,可批量处理!
python·pdf
go54631584651 小时前
python 从知网的期刊导航页面抓取与农业科技相关的数据
开发语言·python·科技
m0_699659561 小时前
QT知识点复习
开发语言·qt
南玖yy1 小时前
C语言:数组的介绍与使用
c语言·开发语言·算法
米码收割机1 小时前
【python】tkinter实现音乐播放器(源码+音频文件)【独一无二】
开发语言·python·pygame
星如雨グッ!(๑•̀ㅂ•́)و✧2 小时前
Java NIO全面详解
java·python·nio
笛柳戏初雪2 小时前
Python中的函数(下)
开发语言·python
美味小鱼2 小时前
初识Cargo:Rust的强大构建工具与包管理器
开发语言·rust·cargo
码界筑梦坊2 小时前
基于Django的个人博客系统的设计与实现
后端·python·django·毕业设计