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)

 

posted @ 2022-04-15 17:52  毛绒绒  阅读(149)  评论(0编辑  收藏  举报