我有一张带有两张纸的excel文件。我想从第一张纸到第二张纸上复印3列。
注意:
我尝试了很多方法。到目前为止,我最好的尝试是:
df_new_sheet2 = pd.concat([df_old_sheet2, df_three_of_sheet1], axis=1, join_axes=[df_old_sheet2.index])
但这不是理想的输出。
如果熊猫不能这样做,你能否建议一些其他可以使用的python包?
如果我没有清楚地描述问题,我上传了一张可能或多或少有用的图片。谢谢你的回答〜
更新[2017.07.24]:
我终于找到了我的错!
插入一个带索引号的列然后,按照b2002的分辨率,事情会好起来的。 :)
答案 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 JOIN
或pyodbc
模块。由于您使用的是SQL,pypyodbc
需要列,重命名,使用SELECT
,WHERE
或JOIN
其他工作表进行过滤,以及在其他工作簿中进行过滤,甚至与{{1 }}:
UNION