使用pandas组合/合并两个不同的Excel文件/工作表

14
我正在尝试合并两个不同的Excel文件。(感谢这篇文章Import multiple excel files into python pandas and concatenate them into one dataframe),到目前为止,我得出的方法是:
import os
import pandas as pd

df = pd.DataFrame()

for f in ['c:\\file1.xls', 'c:\\ file2.xls']:
    data = pd.read_excel(f, 'Sheet1')
    df = df.append(data)

df.to_excel("c:\\all.xls")

这是它们的外观。

输入图像描述

但我想要:

  1. 排除每个文件的最后几行(即File1.xls中的第4行和第5行;File2.xls中的第7行和第8行)。
  2. 添加一列(或覆盖Column A),以指示数据来自何处。

例如:

输入图像描述

这可行吗?谢谢。

3个回答

15

对于第一种情况,您可以按照此处的说明指定skip_footer;或者,您也可以这样做:

data = data.iloc[:-2]

一旦你阅读了数据。

对于第二点,你可以这样做:

from os.path import basename
data.index = [basename(f)] * len(data)

另外,也许将所有数据框放在一个列表中,然后在最后使用concat会更好;像这样:

```python df_list = [df1, df2, df3] result_df = pd.concat(df_list) ```
df = []
for f in ['c:\\file1.xls', 'c:\\ file2.xls']:
    data = pd.read_excel(f, 'Sheet1').iloc[:-2]
    data.index = [os.path.basename(f)] * len(data)
    df.append(data)

df = pd.concat(df)

2
太棒了,我必须得说。behzad.nouri,你太美了! - Mark K

4
import os
import os.path
import xlrd
import xlsxwriter

file_name = input("Decide the destination file name in DOUBLE QUOTES: ")
merged_file_name = file_name + ".xlsx"
dest_book = xlsxwriter.Workbook(merged_file_name)
dest_sheet_1 = dest_book.add_worksheet()
dest_row = 1
temp = 0
path = input("Enter the path in DOUBLE QUOTES: ")
for root,dirs,files in os.walk(path):
    files = [ _ for _ in files if _.endswith('.xlsx') ]
    for xlsfile in files:
        print ("File in mentioned folder is: " + xlsfile)
        temp_book = xlrd.open_workbook(os.path.join(root,xlsfile))
        temp_sheet = temp_book.sheet_by_index(0)
        if temp == 0:
            for col_index in range(temp_sheet.ncols):
                str = temp_sheet.cell_value(0, col_index)
                dest_sheet_1.write(0, col_index, str)
            temp = temp + 1
        for row_index in range(1, temp_sheet.nrows):
            for col_index in range(temp_sheet.ncols):
                str = temp_sheet.cell_value(row_index, col_index)
                dest_sheet_1.write(dest_row, col_index, str)
            dest_row = dest_row + 1
dest_book.close()
book = xlrd.open_workbook(merged_file_name)
sheet = book.sheet_by_index(0)
print "number of rows in destination file are: ", sheet.nrows
print "number of columns in destination file are: ", sheet.ncols

0

变更

df.to_excel("c:\\all.xls")

df.to_excel("c:\\all.xls", index=False)

您可能需要尝试一下双引号,但我认为那应该可以工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接