Python3 進行報表整理 子表加入母表中

2021-08-17 22:36:27 字數 2670 閱讀 4196

fp報表整理技術,python3,pandas

我們在進行報表的時候,會遇到許多報表:

需要把下面這種表,按著姓名(身份證號)的方式,加入其中,以便查詢:

下面**實現了姓名均唯一的情況下,將小的資料表加入大的資料表。所以母表和子表,在預處理的時候,要求姓名必須對應且唯一(子表中有沒有母表的姓名,不影響,但是母表中不能有2個張三,子表也不能有2個張三,可以根據身份證號或者戶人數分別命名為張三1和張三2)。

**如下:

import os

import pandas as pd

excelpath = 'e:\pythontest\excel' #構建所有檔案路徑

thetablepath = '128戶318人待上報.xls' #構建資料總表模板

name = '姓名' #以姓名為唯一標識(索引)

def toall(bigpath,smallpath,name):

atable = pd.dataframe(pd.read_excel(bigpath)) #將資料總表模板 載入

btable = pd.dataframe(pd.read_excel(smallpath)) #將要加入的小**載入

if btable[name].index.is_unique: #如果name(姓名列)唯一 則繼續載入

grouped = btable

else:

grouped = btable.groupby(name).sum() #如果姓名列不唯一 則以姓名為索引 將其他專案相加(這裡待修改)

result = pd.merge(atable, grouped, on=[name], how='left') #按著姓名對應的方式 將小表 加入 總表,但以總表為準

result.to_excel(thetablepath) #輸出新的總表

print(atable.shape) #看之前表的大小

print(result.shape) #看之後的表大小 看結構是否有變化

return

for filename in os.listdir(r'e:\pythontest\excel'): #讀取檔名稱

targetpath = excelpath + '\\'+ filename #構造資料夾內每乙個檔案的絕對路徑

print(targetpath)

toall(thetablepath,targetpath,name) #更新表

i但上述**加橫線的地方待修改,因為子表中有可能有重名的,而且在真實的**中,需要根據身份證號來修改。但實際工作中,身份證號也有輸錯的時候,所以可以考慮根據身份證號中的出生日期來一一修改姓名,或者根據戶人數來修改姓名。邏輯是:首先將母表中重複的挑出來,根據身份證號(出生日期)或者戶人數判斷,如果一樣則刪掉乙個只留乙個唯一,如果不一樣,則在姓名後加出生日期來進行甄別。同時生成新的對照表和母表,這時,母表就沒有姓名重複的情況了,對照表也只有之前修改的重名的資訊,比如對照表有:李四19600312,李四19650106之類的姓名。之後用對照表的身份證號前幾位、同時還有姓名的前兩個字元,與子表對,如果子表有這一行,則將相應的子表的姓名項改為對照表的姓名項,同時將新的子表合併到母表中。

改進辦法:以身份證號為連線兩側的列,並刪除帶有姓名的列:

import os

import pandas as pd

filepath = '撫卹事業和計生' #子表所有檔案所在的資料夾

tablepath = '撫卹事業和計生彙總.xls' #資料母表的模板

name = u'身份證號' #以身份證號連線兩側內容

def toall(tablepath,fenpath,name):

zongtable = pd.dataframe(pd.read_excel(tablepath)) # 將資料總表模板 載入

# 有的身份證號是殘疾證號,多了2位,所以要將身份證號前18位擷取,並將字母都變成大寫,以便統一

fentable = pd.dataframe(pd.read_excel(fenpath, sheet_name=0)) # 將要加入的小**載入

# 有的身份證號是殘疾證號,多了2位,所以要將身份證號前18位擷取,並將字母都變成大寫,以便統一

result = pd.merge(zongtable, fentable, on=[name], how='left') # 按著身份證號對應的方式 將小表 加入 總表,但以總表為準

result = result[result.columns.drop(list(result.filter(regex='姓名')))]

# 刪除含有姓名的列

result.to_excel(tablepath) # 輸出新的總表

print(result.shape)

return

for filename in os.listdir(filepath): #讀取檔名稱

targetpath = filepath + '/'+ filename #構造資料夾內每乙個檔案的絕對路徑

print(targetpath)

toall(tablepath,targetpath,name) #更新表

Python3 例項整理

python3例項整理 1 格式化佔位符print format a1,a2,a3 2 獲取最大最小值函式 max min 可用於 列表元組字串 ascii 排序 3 交換變數a,b 1,2 a,b b,a以上可以無需中間變數,直接變數的值互換 4 if else 使用新發現 素數判斷 if els...

python3進行excel操作

只要有需求,就會找出解決問題的方法 pip install xlrd 讀取 pip install xlwt 寫入 首先先初始化 import xlwt excel xlwt.workbook encoding utf 8 建立excel sheet excel.add sheet member 建...

python3操作excel完成報表合併

順手幫同學個小忙,他的任務是每個月要將每天的報表合併為乙個大的報表。由於他完全沒有程式設計基礎,所以做了個小介面,並做成exe檔案,使其可以傻瓜式執行。記錄一下實現過程,在我的github目錄下。由於沒有使用python操作過excel,所以在網上查了些資料,記錄如下 python操作excel需要...