如何在Python中joinexcel列名与数据框头?

我有一个示例数据框,如:

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

我需要将其保存到Excel工作表中,但要考虑要编写哪些Excel列。 也就是说,我需要一些东西,比如将pdf列名与Excel中的列名完全一样。

以下解决scheme不保存在适当的列中,而是从左到右:

 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列,猪到GBD不应该被填满。

例子:

在这里输入图像说明

我不是很确定你的意思是你需要通过列名来映射列,这些列名需要从文件中读取,你需要创build一个合适的列的字典映射,然后写入值find列号,或者只是根据你的pandasDataFrame的列名写入值。

但是对于其中的任何一个,你都不能使用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或类似的东西)

我不是很满意,因为它比一次保存整个表格要慢。