将多个excel文件导入python pandas并将它们连接成一个数据帧

时间:2014-01-03 16:16:40

标签: python excel pandas concatenation

我想将目录中的几个excel文件读入pandas并将它们连接成一个大数据帧。我虽然无法弄明白。我需要一些关于for循环和构建连接数据帧的帮助: 以下是我到目前为止的情况:

import sys
import csv
import glob
import pandas as pd

# get data file names
path =r'C:\DRO\DCL_rawdata_files\excelfiles'
filenames = glob.glob(path + "/*.xlsx")

dfs = []

for df in dfs: 
    xl_file = pd.ExcelFile(filenames)
    df=xl_file.parse('Sheet1')
    dfs.concat(df, ignore_index=True)

6 个答案:

答案 0 :(得分:34)

正如评论中所提到的,您所犯的一个错误就是您正在循环一个空列表。

以下是我将如何使用一个示例,其中包含5个相同的Excel文件,这些文件是一个接一个地附加的。

(1)进口:

import os
import pandas as pd

(2)列出文件:

path = os.getcwd()
files = os.listdir(path)
files

输出:

['.DS_Store',
 '.ipynb_checkpoints',
 '.localized',
 'Screen Shot 2013-12-28 at 7.15.45 PM.png',
 'test1 2.xls',
 'test1 3.xls',
 'test1 4.xls',
 'test1 5.xls',
 'test1.xls',
 'Untitled0.ipynb',
 'Werewolf Modelling',
 '~$Random Numbers.xlsx']

(3)选出'xls'文件:

files_xls = [f for f in files if f[-3:] == 'xls']
files_xls

输出:

['test1 2.xls', 'test1 3.xls', 'test1 4.xls', 'test1 5.xls', 'test1.xls']

(4)初始化空数据框:

df = pd.DataFrame()

(5)循环覆盖空数据框的文件列表:

for f in files_xls:
    data = pd.read_excel(f, 'Sheet1')
    df = df.append(data)

(6)享受您的新数据框。 : - )

df

输出:

  Result  Sample
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10

答案 1 :(得分:5)

这适用于python 2.x

位于Excel文件

的目录中

请参阅http://pbpython.com/excel-file-combine.html

{{1}}

答案 2 :(得分:1)

这可以通过这种方式完成:

import pandas as pd
import glob

all_data = pd.DataFrame()
for f in glob.glob("/path/to/directory/*.xlsx"):
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)

all_data.to_csv("new_combined_file.csv")  

答案 3 :(得分:0)

将熊猫作为pd导入

导入操作系统

os.chdir('...')

读取第一个文件以获取列名

fdf = pd.read_excel(“ first_file.xlsx”,sheet_name =“ sheet_name”)

创建计数器以分隔不同文件的数据

fdf [“ counter”] = 1

nm = list(fdf)

c = 2

读取前1000个文件

对于os.listdir()中的i:

print(c)

如果c <1001:

if "xlsx" in i:

  df= pd.read_excel(i, sheet_name="sheet_name")

  df["counter"]=c

  if list(df)==nm:

    fdf=fdf.append(df)

    c+=1

  else:

    print("headers name not match")

else:

  print("not xlsx")

fdf = fdf.reset_index(drop = True)

放松

答案 4 :(得分:0)

import pandas as pd
import os

files = [file for file in os.listdir('./Salesfolder')]
all_month_sales= pd.DataFrame()
for file in files
    df= pd.read_csv("./Salesfolder/"+file)
    all_months_data=pd.concat([all_months_sales,df])
all_months_data.to_csv("all_data.csv",index=False)

您可以从文件夹(在我的情况下为Salesfolder)中读取所有.xls文件,本地路径也是如此。通过迭代使用,您可以将它们放入空数据框,并且可以将数据框与此连接。我还已经将所有月份的数据导出到另一个csv到一个csv文件中

答案 5 :(得分:0)

我有多个Excel文件,每个文件都有一个公共ID [每个Excel工作表都有ID列]。我尝试了以下方式。我没有根据ID获得正确的数据框。 将熊猫作为pd导入 导入操作系统

path=os.getcwd()
path
files=os.listdir(path)
fil_xlsx=[f for f in files if f[-4:]=='xlsx']

df=pd.DataFrame()

for f in fil_xlsx:
    data=pd.read_excel(f,'Sheet1')
    df=df.append(data)

我以这种方式得到一个空的数据框。

df=pd.DataFrame()
      for f in fil_xlsx:
    data=pd.read_excel(f,'Sheet1')
    all1=pd.concat([data,df],ignore_index=True,join="inner")