source

여러 Excel 파일을 python pander로 Import하여 하나의 데이터 프레임에 연결

ittop 2023. 4. 17. 22:29
반응형

여러 Excel 파일을 python pander로 Import하여 하나의 데이터 프레임에 연결

디렉토리에서 팬더로 엑셀 파일을 여러 개 읽어 하나의 빅데이터프레임에 연결하고 싶습니다.하지만 나는 그것을 이해할 수 없었다.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)

코멘트에서 설명한 것처럼 빈 목록을 루프하고 있는 오류도 있습니다.

동일한 Excel 파일을 5개씩 첨부하는 예를 들어 다음과 같습니다.

(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

이것은 python 2.x에서 동작합니다.

엑셀 파일이 있는 디렉토리에 있다

http://pbpython.com/excel-file-combine.html 를 참조해 주세요.

import numpy as np
import pandas as pd
import glob
all_data = pd.DataFrame()
for f in glob.glob("*.xlsx"):
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)

# now save the data frame
writer = pd.ExcelWriter('output.xlsx')
all_data.to_excel(writer,'sheet1')
writer.save()    

목록 이해는 내부에서 사용할 수 있습니다.

import os
import pandas

path = '/path/to/directory/'
filenames = [file for file in os.listdir(path) if file.endswith('.xlsx')]

df = pd.concat([pd.read_excel(path + file) for file in filenames], ignore_index=True)

와 함께ignore_index = True의 지표df에는 0, …, n - 1이라는 라벨이 붙습니다.

그것을 하는 더 깔끔한 방법이 있다.

# import libraries
import glob
import pandas as pd

# get the absolute path of all Excel files 
allExcelFiles = glob.glob("/path/to/Excel/files/*.xlsx")

# read all Excel files at once
df = pd.concat(pd.read_excel(excelFile) for excelFile in allExcelFiles)

이것은 다음과 같은 방법으로 실행할 수 있습니다.

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")  

#실패하다

import pandas as pd 
from glob import glob

dfs=[]
for f in glob("data/*.xlsx"):
    dfs.append(pd.read_excel(f))
df=pd.concat(dfs, ignore_index=True)
import pandas as pd

import os

os.chdir('...')

#read first file for column names

fdf= pd.read_excel("first_file.xlsx", sheet_name="sheet_name")

#create counter to segregate the different file's data

fdf["counter"]=1

nm= list(fdf)

c=2

#read first 1000 files

for i in os.listdir():

  print(c)

  if 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)

#relax
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)

폴더(내 경우 Sales folder)에서 모든 .xls 파일을 읽을 수 있습니다.로컬 경로도 마찬가지입니다.~ 를 반복하여 빈 데이터 프레임에 넣을 수 있으며 데이터 프레임을 이 프레임에 연결할 수 있습니다.또한 모든 달의 데이터를 하나의 CSV 파일로 내보냈습니다.

언급URL : https://stackoverflow.com/questions/20908018/import-multiple-excel-files-into-python-pandas-and-concatenate-them-into-one-dat

반응형