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']
相关推荐
m0_736919102 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手2 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934732 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy2 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖2 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_763472463 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威3 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
TechWJ4 小时前
PyPTO编程范式深度解读:让NPU开发像写Python一样简单
开发语言·python·cann·pypto
枷锁—sha4 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
abluckyboy4 小时前
Java 实现求 n 的 n^n 次方的最后一位数字
java·python·算法