python pandas dataframe excel xlwings docx 常用簡單函數方法匯總


# -*- coding: UTF-8 -*-
import pandas as pd
import numpy as np
import datetime
import os
import sys
import warnings
warnings.filterwarnings('ignore')#忽略warning
#打包文件 -F是生成單文件
pyinstaller --noconsole -F --noconfirm t.py
#加
ico圖標
pyinstaller --noconsole -F --noconfirm -i i.ico t.py

#print打印顯示設置

pd.set_option('display.max_columns', 1000000)
pd.set_option('display.max_rows', 1000000)
pd.set_option('display.max_colwidth', 1000000)
pd.set_option('display.width', 1000000)

#取當前時間,留作文件名用
time1 = datetime.datetime.now()
time1 = datetime.datetime.strftime(time1,'%m.%d_%H.%M.%S')

#基礎讀取 data=pd.read_excel("test.xlsx",sheet_name="數據",thousands=",") #簡單保存到excel文件 data.to_excel("all.xlsx",index=False,sheet_name='全部數據') #多sheet保存到文件 writer1=pd.ExcelWriter("test.xlsx") com_b2.to_excel(writer1,index=False,sheet_name='R2銀行出') com_a2.to_excel(writer1,index=False,sheet_name='R2財務出') writer1.save()

writer1.close()#記得關閉


#按照某列的值分組
new=pd.read_excel(file,thousands=",")
GroupBy=new.groupby("對方戶名")
for name,group in GroupBy:
    print(name)#分組的名稱
    print(group)#分組的數據

#建立副本
df2=df1.copy()

# 創建一個空的 DataFrame
df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D'])

#apply lambda遍歷修改某一列的值
data_bank_chu[bank_col_chu]=data_bank_chu[bank_col_chu].apply(lambda x:abs(x))

#新增數據
res1 = pd.concat([res1, row], ignore_index=True)#拼接多個df
res2 = res2.append(row, ignore_index=True)#新增一行數組

#選取最大的 n 個值
print(df.nlargest(3,'Math')) # 從大到小排序,並取得 'Math' 最大的 3 行

#選取最小的 n 個值
print(df.nsmallest(3,'Math')) # 從大到小排序,並取得 'Math' 最大的 3 行

#數據類型轉換
df["Customer Number"] = df["Customer Number"].astype("int")

#數據轉list
data.values.tolist()
#遍歷每一條記錄
for index,row in he.iterrows():
  print(row)
#NA數據清理
data_zhang = data_zhang.dropna(subset=["科目名稱"])#清空
data_bank = data_bank.fillna(0)#填充0
#NaN數據篩選
print(data[data['支出金額'].isnull()]) print(data[data['支出金額'].notnull()]) data=data[data['支出金額'].notnull()]
#日期時間提取
ding["time"] = pd.to_datetime(ding["開票日期"],format="%Y-%m-%d%H:%M:%S")
ding["month"] = ding["time"].dt.month

#絕對路徑讀取csv
path=r'C:\Users\j\Desktop\g\用戶信息列表.xls'
data=pd.read_csv(path,sep='\t',encoding='gbk',low_memory=False)

#去除所有空格
df = df.applymap((lambda x: "".join(x.split()) if type(x) is str else x))

#所有sheet表名
reader = pd.ExcelFile(file)
sheet_names = reader.sheet_names

#輸入信息后繼續執行
gogogo=True
while gogogo:
in1=input("開始導入?")
if in1=="y" or in1=="Y":
gogogo=False
else:
exit("終止!")

#刪除行列
data.drop(index=[1])) # 刪除第二行數據
data.drop(columns = ['A']))  #刪除A列數據

#多df合並
res = pd.merge(da,db,on=["a","b"],how='outer',suffixes=("_a","_b"))
#重新排列列順序,已經去除多余的列
res_01=res_01[["c","b","a"]]

#兩個df數據的補集(index是一致的,同源)
dif=res[~res.index.isin(other.index.to_list())]

#對比兩列數據並且把結果標記到在第三列
res["chaiyi"] = res.apply(lambda x: "Yes" if x["a"] == x["b"] else "No", axis=1)

#記錄程序運行時間
start = time.time()
pass#要操作的事情
end = time.time()
print('程序加載用時:%s秒' % (end - start))


#列讀取為str對象類型
df = pd.read_excel ("test.xlsx" , converters={'類別編碼':str})

#合並多列:
d2=pd.DataFrame(d.groupby('a').agg({'c':'first', 'b':'sum'})).reset_index()

未完待續

操作word,docx

from docx import Document
from docx.shared import RGBColor
document=Document(r"需生成報告.docx")
paragraphs=document.paragraphs
print(len(paragraphs))
for p in paragraphs:
    print(p.text)
tables=document.tables
table=tables[0]
for r,row in enumerate(table.rows):
    for c,cell in enumerate(row.cells):
        print(r,c)
        print(cell.text)
        p = cell.paragraphs[0]
        p.clear()
        run = p.add_run("徐工科技六角恐龍")
        if c%2==0:
            run.font.color.rgb = RGBColor(250, 0, 0)
#保留DOCX原來文字段落的格式,替換文字的方法
for run in (paragraphs[3].runs):
    run.clear()
paragraphs[3].runs[0].add_text("ddd")
document.save("res.docx")

xlwings相關操作

import xlwings as xw

tfile="test.xlsx"
newfile="new.xlsx"

app = xw.App(visible=False, add_book=False)
app.display_alerts = False
app.screen_updating = False
wb = app.books.open(tfile)
ws = wb.sheets[0]
ws2 = wb.sheets[1]

ws.range("A1").value = 101
ws2.range("A1").value = 102

wb.sheets[1].delete()



ws.api.Rows(1).Delete() #刪除首行
ws.api.Rows(1).Insert #插入行
ws.api.Columns(1).Delete()# 刪除首列
ws.api.Columns(1).Insert() #插入列

ws["A1"].value="aaa" #單元格賦值
ws.range("A1","B5").value="bb" #A1到B5單元格全部賦值

ws["A1"].value=[1,2,3] # A1,B1,C1的值依次填成1,2,3,橫向
ws["A1"].options(transpose=True).value=[1,2,3] #A1,A2,A3的值依次填成1,2,3,豎向

#將1,2,3,'D'輸入第一行,4,5,6,'A'輸入第二行,注意,兩個的長度必須一致,否則出錯
list1=[[1,2,3,'D'],[4,5,6,'A']]
ws["A1"].value=list1

ws["A1048576"].end('up').row #最大行,根據單元格位置
print(ws["XFD1"].end('left').column) #最大列,根據單元格位置

lst=ws.range("A1:A"+str(ws["A1048576"].end('up').row)).value #把excel單列值讀取到列表中,str()是要把int轉為string
lst1=ws.range("A1:C"+str(ws["A1048576"].end('up').row)).value # 把excel連續兩個列的值讀取到列表中

lst=ws.range("A1:A"+str(ws["A1048576"].end('up').row)).value #A列的值
lst2=ws.range("C1:C"+str(ws["A1048576"].end('up').row)).value#C列的值
lst3=list(zip(lst,lst2))#合並起來然后轉為列表
dicta=dict(lst3)#列表轉為字



#填充一列方法1:
list1 = [[1],[2],[3],[4],[5]]
ws.range('A1').value = list1
#填充一列方法2:
list2 = [1,2,3,4,5]
ws.range(1,1).options(transpose=True).value = list2

wb.save() wb.save(newfile)
#這里另存為,習慣先復制模板可以用系統命令,感覺更快 cmd = 'copy ' + tfile + ' ' +newfile #不彈黑窗口 subprocess.call(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) wb.close() app.quit()

 

 

 

簡單開啟多進程,加速計算:

# -*- coding: UTF-8 -*-
from multiprocessing import Pool
import os, time

def worker(msg,b):
    t_start = time.time()
    print(b+"%s開始執行,進程號為%d" % (msg, os.getpid()))
    print(2**1024**msg)
    #做一個復雜冪運算,直接可以拉滿CPU用完內存,爽不爽。
    t_stop = time.time()
    print(msg, "執行完畢,耗時%0.2f" % (t_stop - t_start))


if __name__ == '__main__':
    po = Pool(30)  # 最大的進程數為3
    for i in range(0, 30):
        '''每次循環將會用空閑出來的子進程去調用目標'''
        po.apply_async(worker, (i,"ss"))
#這里可以用.get()獲得返回值
print("----start----") po.close() # 關閉進程池,關閉后po不再接受新的請求 po.join() # 等待po中的所有子進程執行完成,必須放在close語句之后 '''如果沒有添加join(),會導致有的代碼沒有運行就已經結束了''' print("-----end-----")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM