簡體   English   中英

如何在python中將excel列名稱與數據框標題結合在一起?

[英]how to join excel column names with data frame headers in python?

我有一個示例數據框,例如:

adf = [['A', 'C', 'G'],['cat','dog','swine'],['black','ginger','pink']]`
pdf = pd.DataFrame.from_records(adf[1:], columns = adf[0])

Out[375]: 
       A       C      G
0    cat     dog  swine
1  black  ginger   pink

我需要將其保存到Excel工作表中,但是要考慮要寫入哪些Excel列。 即,我需要將pdf列名與Excel中的列名連接起來,使其完全相同。

以下解決方案未保存在正確的列中,而是從左到右:

from openpyxl.utils.dataframe import dataframe_to_rows
workbook = openpyxl.load_workbook('map_df.xlsx')
ws = workbook.worksheets[0]

for r in dataframe_to_rows(pdf, index=False, header=False):
    ws.append(r)
workbook.save("appended.xlsx")

注意,我加載了一個現有的工作簿。 我在第一行中有標頭,所以我寫的數據沒有頭。

我問的是通過標題相互映射列的方法,而無需手動編寫,刪除空白等,因為我有大量的數據。 這樣,貓就進入A欄,豬就到達G欄,並且BD都不應填充。

例子:

在此處輸入圖片說明

我不是非常確定您的意思是您需要通過列名來映射列,而列名需要從文件中讀取,您需要創建一個適當列的字典來映射,然后在之后寫入值查找列號,或僅根據熊貓DataFrame的列名寫入值。

但無論哪種情況,您都不能使用append,而需要遍歷“ r”的每個值。

第一版(帶映射)

from openpyxl.utils.dataframe import dataframe_to_rows
workbook = openpyxl.load_workbook('map_df.xlsx')
ws = workbook.worksheets[0]

headers = worksheet.rows[1] # Assuming your header is in the first row

header_map = {
    col: cell.column for cell in headers if cell.value.isin(pdf.columns)
}

start_row = 1    
for r in dataframe_to_rows(pdf, index=False, header=False):
    for i, (col_name, v) in enumerate(zip(pdf.columns, r)):
        coln = header_map[col_name]
        ws['{coln}{i}'.format(coln=coln, i=i + start_row)].value = v

第二版(直接從標題開始)

from openpyxl.utils.dataframe import dataframe_to_rows
workbook = openpyxl.load_workbook('map_df.xlsx')
ws = workbook.worksheets[0]

start_row = 1
for r in dataframe_to_rows(pdf, index=False, header=False):
    for i, (col_name, v) in enumerate(zip(pdf.columns, r)):
        ws['{coln}{i}'.format(coln=col_name, i=i + start_row)].value = v

我做了這樣的事情:

last_row = worksheet.max_row
for j in range(len(df.columns)):
    for i in range(len(df)):
        worksheet['%s%d' % (df.columns.values[j], last_row+1+i)] = df.iloc[i,j]

其中df是我要在Excel中具有的所有列的pandas DataFrame結構。 因此它(例如,在df中)將A,C,G和B或D留空(根據Excel純列名,如果您具有從A到XEC的設置,或類似的東西)

我不是很滿意,因為它比一次保存整個工作表要慢。

暫無
暫無

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

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