簡體   English   中英

從 excel 讀取數據並用新列 PYTHON 重寫

[英]Reading data from excel and rewriting it with a new column PYTHON

我最近設法創建了一個程序,該程序從 excel 讀取數據,對其進行編輯並與新列一起重寫,效果很好,但問題是性能,如果 excel 文件包含 1000 行,它會在不到 2 分鍾內完成,但如果它包含 10-15k 行,可能需要 3-4 小時,而且我擁有的行越多,速度就越慢,這對我來說沒有意義。

我的代碼:

從 xls excel 讀取:

 def xls_to_dict(workbook_url):
        workbook_dict = {}
        book = xlrd.open_workbook(workbook_url)
        sheets = book.sheets()
        for sheet in sheets:
            workbook_dict[sheet.name] = {}
            columns = sheet.row_values(0)
            rows = []
            for row_index in range(1, sheet.nrows):
                row = sheet.row_values(row_index)
                rows.append(row)
            return rows
        return workbook_dict

data = xls_to_dict(filename)

寫在excel:

rb = open_workbook(filename, formatting_info=True)
r_sheet = rb.sheet_by_index(0)
wb = copy(rb)
w_sheet = wb.get_sheet(0)

我閱讀並找到了一個名為 Pandas 的 package,它讀取 xlsx 並嘗試對其進行處理,但未能將 DataFrame 中的數據訪問為字典。 因此無法對其進行編輯和重寫以比較性能。

我的代碼:

fee = pd.read_excel(filename)

我的輸入行數據文件是:

ID。 姓名。 家庭。 DOB 國家描述

我的 output 文件是:ID. 姓名。 家庭。 DOB 修改后的國家描述 NATIONALITY

任何建議將被認真考慮。

您可以通過將工作表數據轉換為 dataframe 並將值作為列表來刪除對行的迭代。

from openpyxl import load_workbook
from datetime import datetime,timedelta
from dateutil.relativedelta import relativedelta

def xls_to_dict(workbook_url):
    xl = pd.ExcelFile(workbook_url)   
    workbook_dict = {}
    for sheet in xl.sheet_names:      
        df = pd.read_excel(xl, sheet) 
        columns = df.columns          
        rows = df.values.tolist()     
        workbook_dict[sheet] = rows
    return workbook_dict,columns

data,columns = xls_to_dict(filename)

為了保存,您還可以使用 dataframe 刪除 for 循環

xl = pd.ExcelFile(filename) 
sheet_name = xl.sheet_names[0] #sheet by index
df = pd.read_excel(xl, sheet_name)
df["DOB"] = pd.to_datetime(df["DOB"])
df["age"] = df["DOB"].apply(lambda x: abs(relativedelta(datetime.today(),x).years))
df["nationality"] = #logic to calculate nationality 

book = load_workbook(filename)
writer = pd.ExcelWriter(filename, engine='openpyxl') 
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, sheet_name)
writer.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM