Python Pandas将列从一个工作表复制到另一个工作表而不更改任何数据?

时间:2017-07-22 07:02:51

标签: python excel pandas

我有一张带有两张纸的excel文件。我想从第一张纸到第二张纸上复印3列。

注意:

  • 复制的3列标签名称与第二张表格有一些重复。但是我应该保留第二张的原始数据而不更改它们
  • 我尝试了很多方法。到目前为止,我最好的尝试是:

    df_new_sheet2 = pd.concat([df_old_sheet2, df_three_of_sheet1], axis=1, join_axes=[df_old_sheet2.index])     
    

但这不是理想的输出。

如果熊猫不能这样做,你能否建议一些其他可以使用的python包?

如果我没有清楚地描述问题,我上传了一张可能或多或少有用的图片。谢谢你的回答〜

jpg

更新[2017.07.24]:

我终于找到了我的错!

插入一个带索引号的列然后,按照b2002的分辨率,事情会好起来的。 :)

2 个答案:

答案 0 :(得分:2)

此方法使用pandas和xlsxwriter

设置(创建demo excel文件):

import pandas as pd

df1 = pd.DataFrame({'1_A': [1,2,3,4], '1_B': [5,4,6,5],
                    '1_C': [8,7,9,0], '1_D': [9,7,8,5], '1_E': [2,4,9,8]})
df2 = pd.DataFrame({'1_A': [5,4,1,3], '1_B': [55,2,3,4]})

setup_dict = {'Sheet_1': df1, 'Sheet_2': df2}

with pd.ExcelWriter('excel_file.xlsx',
                    engine='xlsxwriter') as writer:

    for ws_name, df_sheet in setup_dict.items():
        df_sheet.to_excel(writer, sheet_name=ws_name)

(从这里开始阅读现有的Excel文件)

#Read your excel file, use "sheetname=None" to create a dictionary of
#worksheet dataframes.  (Note: future versions of pandas will use
#"sheet_name" vs. "sheetname").
#Replace 'excel_file.xlsx' with the actual path to your file.
ws_dict = pd.read_excel('excel_file.xlsx', sheetname=None)
#Modify the Sheet_2 worksheet dataframe:
#(or, create a new worksheet by assigning concatenated df to a new key,
#such as ws_dict['Sheet_3'] = ...)
ws_dict['Sheet_2'] = pd.concat([ws_dict['Sheet_2'][['1_A','1_B']], 
                                ws_dict['Sheet_1'][['1_A','1_B','1_C']]],
                                axis=1)
#Write the ws_dict back to disk as an excel file:
#(replace 'excel_file.xlsx' with your desired file path.)
with pd.ExcelWriter('excel_file.xlsx',
                    engine='xlsxwriter') as writer:

    for ws_name, df_sheet in ws_dict.items():
        df_sheet.to_excel(writer, sheet_name=ws_name)

可以使用其他方法来组合列,例如连接(例如,使用表示原始工作表的不同后缀) 因为excel文件时所有工作表都转换为数据帧 正在阅读。

编辑(适用于新工作表和唯一列名...)

ws_dict = pd.read_excel('excel_file.xlsx', sheetname=None)
#Modify the Sheet_2 worksheet dataframe:
#(or, create a new worksheet by assigning concatenated df to a new key,
#such as ws_dict['Sheet_3'] = ...)
ws_dict['Sheet_3'] = ws_dict['Sheet_2'][['1_A','1_B']].join(ws_dict['Sheet_1'][['1_A','1_B','1_C']],
                                                            lsuffix='_sh2', rsuffix='_sh1', how='outer')
#Write the ws_dict back to disk as an excel file:
#(replace 'excel_file.xlsx' with your desired file path.)
with pd.ExcelWriter('excel_file.xlsx',
                    engine='xlsxwriter') as writer:

    for ws_name, df_sheet in ws_dict.items():
        df_sheet.to_excel(writer, sheet_name=ws_name)

答案 1 :(得分:1)

如果使用Excel和Python for Windows(如果没有,对于未来的读者),请考虑使用与JET/ACE Engine的ODBC连接的SQL解决方案,它可以查询Excel工作簿,自己的Access数据库,甚至是文本文件( CSV /标签/ TXT)。这个引擎是.dll文件,默认安装在Windows机器或MS Office中。这种方法避免打开任何工作簿。

只需在工作表上运行.class { color: red; } #id { background: green; } 并使用panda的read_sql()将查询结果集直接导入数据框。连接可以使用INNER JOINpyodbc模块。由于您使用的是SQL,pypyodbc需要列,重命名,使用SELECTWHEREJOIN其他工作表进行过滤,以及在其他工作簿中进行过滤,甚至与{{1 }}:

UNION