मेरे पास एक शब्दकोश के रूप में इनपुट डेटा है जिसमें संख्याओं के 3 डेटाफ़्रेम शामिल हैं। मैं कुछ ऑपरेशन के साथ प्रत्येक डेटाफ्रेम के माध्यम से पुनरावृति करना चाहता हूं और फिर अंत में प्रत्येक डेटाफ्रेम को एक्सेल करने के लिए परिणाम लिखता हूं।

निम्न कोड ठीक काम करता है सिवाय इसके कि यह केवल शब्दकोश में अंतिम कुंजी के लिए परिणामी डेटाफ़्रेम लिखता है।

मैं अलग-अलग शीट पर लिखे गए सभी 3 डेटाफ्रेम के परिणाम कैसे प्राप्त करूं?

Input_Data={'k1':test1,'k2':test24,'k3':test3}

for v in Input_Data.values():
   
    df1 = v[126:236] 
    df=df1.sort_index(ascending=False)
    Indexer=df.columns.tolist()
    df = [(pd.concat([df[Indexer[0]],df[Indexer[num]]],axis=1)) for num in [1,2,3,4,5,6]]
    df = [(df[num].astype(str).agg(','.join, axis=1)) for num in [0,1,2,3,4,5]]
    df=pd.DataFrame(df)
  dff=df.loc[0].append(df.loc[1].append(df.loc[2].append(df.loc[3].append(df.loc[4].append(df.loc[5])))))


    dff.to_excel('test.xlsx',index=False, header=False)
2
user9106985 23 सितंबर 2020, 18:32

3 जवाब

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

आपका पहला मुद्दा यह है कि लूप के प्रत्येक पुनरावृत्ति के साथ आप एक नई फाइल खोल रहे हैं।

पांडा के अनुसार दस्तावेज़ीकरण:

"अद्वितीय पत्रक_नाम निर्दिष्ट करके कई पत्रक लिखे जा सकते हैं। फ़ाइल में लिखे गए सभी डेटा के साथ परिवर्तनों को सहेजना आवश्यक है। ध्यान दें कि पहले से मौजूद फ़ाइल नाम के साथ ExcelWriter ऑब्जेक्ट बनाने से मौजूदा फ़ाइल की सामग्री होगी मिटा दिया।"

दूसरा, आप एक वेरिएबल शीट नाम प्रदान नहीं कर रहे हैं, इसलिए हर बार डेटा को उसी शीट के रूप में फिर से लिखा जा रहा है।

एक उदाहरण समाधान, ExcelWriter के साथ

#df1, df2, df3 - dataframes
input_data={
'sheet_name1' : df1,
'sheet_name2' : df2,
'sheet_name3' : df3
}

# Initiate ExcelWriter - use xlsx engine
writer = pd.ExcelWriter('multiple_sheets.xlsx', engine='xlsxwriter')

# Iterate over input_data dictionary 
for sheet_name, df in input_data.items():

    """
    Perform operations here
    """

    # Write each dataframe to a different worksheet.
    df.to_excel(writer, sheet_name=sheet_name)

    
# Finally, save ExcelWriter to file
writer.save()

नोट 1. आप केवल एक बार ExcelWriter ऑब्जेक्ट को आरंभ और सहेजते हैं, पुनरावृत्तियों केवल उस ऑब्जेक्ट में शीट जोड़ते हैं

नोट 2. आपके कोड की तुलना में, "to_excel ()" फ़ंक्शन को चर "शीट_नाम" प्रदान किया जाता है

2
Jakub 23 सितंबर 2020, 19:09
# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

# Write each dataframe to a different worksheet.
for sheet_name, df in zip(sheet_names, dfs):
    df.to_excel(writer, sheet_name=sheet_name)

# Close the Pandas Excel writer and output the Excel file.
writer.save()
2
ChaimG 23 सितंबर 2020, 18:45

प्रत्येक पुनरावृत्ति पर फ़ाइल का नाम बदलने का प्रयास करें:

Input_Data={'k1':test1,'k2':test24,'k3':test3}
file_number = 1

for v in Input_Data.values():
   
    df1 = v[126:236] 
    df=df1.sort_index(ascending=False)
    Indexer=df.columns.tolist()
    df = [(pd.concat([df[Indexer[0]],df[Indexer[num]]],axis=1)) for num in [1,2,3,4,5,6]]
    df = [(df[num].astype(str).agg(','.join, axis=1)) for num in [0,1,2,3,4,5]]
    df=pd.DataFrame(df)
  dff=df.loc[0].append(df.loc[1].append(df.loc[2].append(df.loc[3].append(df.loc[4].append(df.loc[5])))))
    
    file_name='test'
    file_number=str(file_number)
    

    dff.to_excel( str(file_name+file_number)+".xlsx",index=False, header=False)
    
    file_number=int(file_number)
    file_number = file_number+1
2
coelidonum 23 सितंबर 2020, 19:03