pandas处理excel总结
总结要点
读取步骤
name_='增值税系统'
dir_ ="C:/Users/bob11/Desktop/数据项整理/数据项/%s.xlsx"%name_
df1=pd.read_excel(dir_,skiprows=0,sheet_name=None) # sheet_name=None 用于读取所有sheet页
文件地址采用/,可以避免\需要用r来标注字符串,读取excel时添加参数sheet_name=None可以读取所有sheet名,并通过
list1=list(df1)
生成sheet名的列表,结合for循环可以实现sheet的遍历。
for i in list1:
df_ = df1.get(i)
df_=df_[['数据项名称','数据项英文名称']]
x= df0.loc[df0['数据表名称']==i,'经营管理数据平台库表'].values[0] # 匹配目录中对应行的库表名
print(x)
df_.insert(0,'库表名',x)
df_.insert(0,'表描述',i)
df_.insert(0,'系统名称',name_)
if dfs is None:
dfs=df_
else:
dfs = pd.concat([dfs, df_], ignore_index=True)
其中df_ = df1.get(i)用于读取具体某页sheet。
df_=df_[['数据项名称','数据项英文名称']]用于获取表内某列数据,注意当获取2列以上时需要使用嵌套列表。
x= df0.loc[df0['数据表名称']==i,'经营管理数据平台库表'].values[0] 的意思时定位到df0表中‘数据表名称列’,找出值为i
的行,并取本行中‘经营管理数据平台库表’列的值,由于loc得出的数据为表,需要搭配values[0]转换为字符串等。
df_.insert(0,'库表名',x)的三个参数分别为插入列的位置, 插入列的名称,插入列的值,其中x可以为列表也可以为字符串, 字符串时为全列填充。
判断语句存在的目的是为了在第一次循环时,给合并表dfs赋值,pd.concat([dfs, df_], ignore_index=True)实现合并
dfs.to_excel('C:/Users/bob11/Desktop/%s.xlsx'%name_,index=False)
最后的导出excel操作时,添加参数index=False用于剔除默认A列的数字序号。
附:完整代码
import pandas as pd
import numpy as np
name_='增值税系统'
dir_ ="C:/Users/bob11/Desktop/数据项整理/数据项/%s.xlsx"%name_
df1=pd.read_excel(dir_,skiprows=0,sheet_name=None) # sheet_name=None 用于读取所有sheet页
list1=list(df1) # 所有sheet页列表
df0=df1.get('目录页') # 目录页用0锁定
list1.remove('目录页') # 剔除目录页,剔除循环
dfs = None
for i in list1:
df_ = df1.get(i)
df_=df_[['数据项名称','数据项英文名称']]
x= df0.loc[df0['数据表名称']==i,'经营管理数据平台库表'].values[0] # 匹配目录中对应行的库表名
print(x)
df_.insert(0,'库表名',x)
df_.insert(0,'表描述',i)
df_.insert(0,'系统名称',name_)
if dfs is None:
dfs=df_
else:
dfs = pd.concat([dfs, df_], ignore_index=True)
dfs.to_excel('C:/Users/bob11/Desktop/%s.xlsx'%name_,index=False)
表格结构
附: 合并同格式excel代码:
# 给定文件夹目录, 用于将文件夹内所有同格式的excel文件合并
import pandas as pd
import numpy as np
import os
path = "C:/Users/bob11/Desktop/处理后/"
def ListDir(path: str) -> list:
'''输入路径,返回路径下所有文件名'''
def add_path(filename):
return ''.join([path, filename])
list_ = os.listdir(path)
paths = list(map(add_path, list_))
return paths
def merge_excel(files: str) -> object:
'''输入文件名列表, 返回整理后的pd'''
dfs = None
for file in files:
df = pd.read_excel(file)
if dfs is None:
dfs = df
else:
dfs = pd.concat([dfs, df], ignore_index=True)
return dfs
dfs = merge_excel(files=ListDir(path))
# 导出excel
dfs.to_excel(path+'export.xlsx', index=False)