मेरे पास इसके लिए एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण नहीं है, लेकिन यह रुचि के आधार पर पूछ रहा है।
आर में लूप फ़ंक्शन के साथ, हम नीचे दिए गए कोड के साथ निर्देशिका से सभी .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 ... और इसी तरह। पहली शीट का नाम बदल जाता है।
क्या निर्देशिका के माध्यम से लूप करना संभव है और सभी एक्सेल फाइलों में पहली शीट के लिए डेटाफ्रेम प्राप्त करना संभव है?
पायथन या आर कोड का स्वागत है!
शुक्रिया!
5 जवाब
readxl
-पैकेज . का उपयोग करके एक और (तेज़) आर-समाधान
l <- lapply( file.list, readxl::read_excel, sheet = 1 )
आर में
यहाँ 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)
बिल्कुल, 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())
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) )
सादगी के लिए, मान लें कि हमारे पास इस प्रारूप में पहली शीट के साथ दो कार्यपुस्तिकाएं थीं:
आप निर्देशिका में प्रत्येक .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")}
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।