मेरे पास इसके लिए एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण नहीं है, लेकिन यह रुचि के आधार पर पूछ रहा है।

आर में लूप फ़ंक्शन के साथ, हम नीचे दिए गए कोड के साथ निर्देशिका से सभी .csv प्राप्त करने में सक्षम हैं:

file.list <- list.files(pattern='*.csv') #obtained name of all the files in directory
df.list <- lapply(file.list, read.csv) #list

क्या हमारे लिए .xlsx फ़ाइलों वाली निर्देशिका के माध्यम से अलग-अलग संख्या में शीट के साथ लूप करना संभव होगा?

उदाहरण के लिए: A.xlsx में 3 शीट हैं, जनवरी 01, शीट 2 और शीट 3; B.xlsx में 3 शीट हैं, जनवरी02, शीट2 और शीट3 ... और इसी तरह। पहली शीट का नाम बदल जाता है।

क्या निर्देशिका के माध्यम से लूप करना संभव है और सभी एक्सेल फाइलों में पहली शीट के लिए डेटाफ्रेम प्राप्त करना संभव है?

पायथन या आर कोड का स्वागत है!

शुक्रिया!

3
Javier 7 जिंदा 2019, 10:31

5 जवाब

सबसे बढ़िया उत्तर

readxl-पैकेज . का उपयोग करके एक और (तेज़) आर-समाधान

l <- lapply( file.list, readxl::read_excel, sheet = 1 )
3
Wimpel 7 जिंदा 2019, 15:41

आर में

यहाँ R पैकेज openxlsx का उपयोग करके समाधान दिया गया है

# get all xlsx files in given directory
filesList <- list.files("d:/Test/", pattern = '.*\\.xlsx', full.names = TRUE)

# pre-allocate list of first sheet names
firstSheetList <- rep(list(NA),length(filesList))

# loop through files and get the data of first sheets
for (k in seq_along(filesList)) 
  firstSheetList[[k]] <- openxlsx::read.xlsx(filesList[k], sheet = 1)
4
niko 7 जिंदा 2019, 11:42

बिल्कुल, pandas और python का उपयोग करना संभव है।

import pandas as pd

excel_file = pd.ExcelFile('A.xlsx')
dataframes = {sheet: excel_file.parse(sheet) for sheet in excel_file.sheet_names}

dataframes एक शब्दकोश बन जाता है, जिसमें चाबियां शीट के नाम होती हैं, और मान शीट डेटा वाले डेटाफ्रेम बन जाते हैं। आप उनके माध्यम से इस तरह पुनरावृति कर सकते हैं:

for k,v in dataframes.items():
    print('Sheetname: %s' % k)
    print(v.head())
2
JPeroutek 7 जिंदा 2019, 10:40

Openpyxl का उपयोग करके

get_sheet_names().

यह फ़ंक्शन किसी कार्यपुस्तिका में शीट्स के नाम लौटाता है और आप वर्तमान कार्यपुस्तिका में शीट्स की कुल संख्या के बारे में बताने के लिए नामों की गणना कर सकते हैं। कोड होगा:

>>> wb=openpyxl.load_workbook('testfile.xlsx')
>>> wb.get_sheet_names()
['S1, 'S2', 'S3']

हम एक बार में किसी भी शीट को एक्सेस कर सकते हैं। मान लीजिए कि हम शीट 3 तक पहुंचना चाहते हैं। निम्नलिखित कोड लिखा जाना चाहिए

>>> import openpyxl
>>> wb=openpyxl.load_workbook('testfile.xlsx')
>>> wb.get_sheet_names()
['Sheet1', 'Sheet2', 'Sheet3']
>>> sheet=wb.get_sheet_by_name('Sheet3')

फ़ंक्शन get_sheet_by_name('Sheet3') का उपयोग किसी विशेष शीट तक पहुंचने के लिए किया जाता है। यह फ़ंक्शन शीट का नाम तर्क के रूप में लेता है और शीट ऑब्जेक्ट देता है। हम इसे एक वेरिएबल में स्टोर करते हैं और इसे इस तरह इस्तेमाल कर सकते हैं...

>>> sheet
<Worksheet "Sheet3">
>>> type(sheet)
<class 'openpyxl.worksheet.worksheet.Worksheet'>
>>> sheet.title
'Sheet3'
>>> 

और आखिरकार:

worksheet = workbook.get_sheet_by_name('Sheet3')    
for row_cells in worksheet.iter_rows():
    for cell in row_cells:
       print('%s: cell.value=%s' % (cell, cell.value) )
2
DirtyBit 8 जिंदा 2019, 08:41

सादगी के लिए, मान लें कि हमारे पास इस प्रारूप में पहली शीट के साथ दो कार्यपुस्तिकाएं थीं:

enter image description here

आप निर्देशिका में प्रत्येक .xlsx फ़ाइल पर के साथ पुनरावृति कर सकते हैं glob.glob(), और पहली शीट के डेटाफ़्रेम को pandas.ExcelFile.parse():

from glob import glob
import pandas as pd

sheets = []

# Go through each xlsx file
for xlsx_file in glob("*.xlsx"):

    # Convert sheet to dataframe
    xlsx = pd.ExcelFile(xlsx_file)

    # Get first sheet and append it
    sheet_1 = xlsx.parse(0)
    sheets.append(sheet_1)

print(sheets)

जो एक सूची में निहित दो डेटाफ्रेम को प्रिंट करता है:

[   x  y
0  1  2
1  1  2,    x  y
0  1  2
1  1  2]

आप उपरोक्त को सूची समझ के रूप में भी लिख सकते हैं:

[pd.ExcelFile(xlsx_file).parse(0) for xlsx_file in glob("*.xlsx")]

आप डेटाफ़्रेम को कुंजी के रूप में फ़ाइल नामों के साथ एक शब्दकोश में संग्रहीत कर सकते हैं:

{xlsx_file: pd.ExcelFile(xlsx_file).parse(0) for xlsx_file in glob("*.xlsx")}
1
RoadRunner 7 जिंदा 2019, 10:59