মাল্টিশিট এক্সেল স্প্রেডশীটে ডেটা ফ্রেমগুলির তালিকা সংরক্ষণ করুন


90

আমি কীভাবে এক এক্সেল স্প্রেডশিটে ডেটাফ্রেমগুলির একটি তালিকা এক্সপোর্ট করতে পারি? রাষ্ট্রের
জন্য দস্তাবেজগুলি to_excel:

নোটগুলি
যদি বিদ্যমান এক্সেলরাইটার অবজেক্টটি পাস করে, তবে শীটটি বিদ্যমান ওয়ার্কবুকটিতে যুক্ত করা হবে। এটি একটি ওয়ার্কবুকে বিভিন্ন ডেটা ফ্রেম সংরক্ষণ করতে ব্যবহার করা যেতে পারে

writer = ExcelWriter('output.xlsx')
df1.to_excel(writer, 'sheet1')
df2.to_excel(writer, 'sheet2')
writer.save()

এটি অনুসরণ করে, আমি ভেবেছিলাম যে আমি কোনও ফাংশন লিখতে পারি যা ডেটাফ্রেমগুলির একটি তালিকা নীচে একটি স্প্রেডশিটে সংরক্ষণ করে:

from openpyxl.writer.excel import ExcelWriter
def save_xls(list_dfs, xls_path):
    writer = ExcelWriter(xls_path)
    for n, df in enumerate(list_dfs):
        df.to_excel(writer,'sheet%s' % n)
    writer.save()

তবে (দুটি ছোট ডাটাফ্রেমের একটি তালিকা সহ প্রতিটি to_excelপৃথক পৃথকভাবে সংরক্ষণ করতে পারে ) একটি ব্যতিক্রম উত্থাপিত হয় (সম্পাদনা: ট্রেসব্যাক সরানো) :

AttributeError: 'str' object has no attribute 'worksheets'

সম্ভবত আমি ExcelWriterসঠিকভাবে কল দিচ্ছি না , এটি করার জন্য আমার কীভাবে হওয়া উচিত?

উত্তর:


137

আপনার পান্ডার নিজস্ব ExcelWriterক্লাস ব্যবহার করা উচিত :

from pandas import ExcelWriter
# from pandas.io.parsers import ExcelWriter

তারপরে save_xlsপ্রত্যাশা অনুযায়ী ফাংশনটি কাজ করে:

def save_xls(list_dfs, xls_path):
    with ExcelWriter(xls_path) as writer:
        for n, df in enumerate(list_dfs):
            df.to_excel(writer,'sheet%s' % n)
        writer.save()

11
আপনি কিভাবে এর গতি খুঁজে পাচ্ছেন? আমি গতকাল একই জিনিসটি করার চেষ্টা করেছি এবং দেখতে পেয়েছি যে .xlsx ফাইলটিতে 2000 কলাম সহ একটি ডেটাফ্রেম লেখার ক্ষেত্রে সলিড স্টেট ড্রাইভের সাথে একটি শালীন ওয়ার্কস্টেশনে 100 টি সারি প্রতি 16 টি লেগেছে। আইপথনে% প্রুনের সাথে কিছু দ্রুত প্রোফাইলিং এটি এক্সএমএল প্রসেসিংয়ের কারণে এটি প্রদর্শিত হয়েছিল। শেষ পর্যন্ত আমি সিএসভি দিয়ে গিয়ে ডেটা ইন্টি এক্সেল পেয়েছিলাম কারণ এক্সেল রাইটারের গতিটি প্রতিরোধমূলকভাবে ধীর ছিল।
snth

6
2018 তে এখনও ধীর গতিতে
স্ট্যাম্যাক্স

4
আপনি ExcelWriterপ্রসঙ্গ পরিচালক হিসাবেও ব্যবহার করতে পারেন । with ExcelWriter(xls_path) as writer: df.to_excel(writer, sheet_name)
বলপয়েন্টবেন

4
ধন্যবাদ অ্যান্ডি আপনি কি 'sheet%s' % nদয়া করে কিছুটা বোঝাতে আপত্তি করবেন ? এটি কী করে এবং কীভাবে এটি কাজ করে?
বোভেন লিউ

4
@ বোভেনলিউ এটি শীটকে শীট 1, শিট 2 ইত্যাদির নামকরণ করছে
জিয়াওমি

18

যদি কারও কাছে ডেটাফ্রেমগুলির অভিধানের সাহায্যে এটি কীভাবে করা যায় তার উদাহরণ প্রয়োজন:

from pandas import ExcelWriter

def save_xls(dict_df, path):
"""
Save a dictionary of dataframes to an excel file, with each dataframe as a seperate page
"""

    writer = ExcelWriter(path)
    for key in dict_df:
        dict_df[key].to_excel(writer, key)

    writer.save()

উদাহরণ: save_xls(dict_df = my_dict, path = '~/my_path.xls')


এটা সত্যিই আমার দিন বাঁচিয়েছে। তবে একটি জিনিস আছে যা আমি বুঝতে পারি না যদিও এটি কাজ করেছিল। অংশটি কী করে '%s' % key? আপনি এটি ব্যাখ্যা করতে আপত্তি করতে হবে? ধন্যবাদ!
বোভেন লিউ

@ বোভেনলিউ যা অভিধানের মূল মানটি গ্রহণ করে এবং এটি পৃষ্ঠার নামের জন্য এটি এক্সেল শিটটিতে ব্যবহার করে। '% s' হ'ল একটি স্থানধারক যা "কী" দিয়ে পূর্ণ। আশা করি এইটি কাজ করবে.
জ্যারেড

0

ডেটা ফ্রেমে কিছু সমর্থনকারী অক্ষর টাইপ থাকলে কখনও কখনও সমস্যাগুলি (ইউনিকোডযুক্ত একটি এক্সেল ফাইল রাইটিং) হতে পারে। এটিকে কাটিয়ে উঠতে আমরা ' xlsxwriter ' প্যাকেজটি নীচের ক্ষেত্রে যেমন ব্যবহার করতে পারি :

নীচের কোডের জন্য:

from pandas import ExcelWriter
import xlsxwriter
writer = ExcelWriter('notes.xlsx')
for key in dict_df:
        data[key].to_excel(writer, key,index=False)
writer.save()

"IllegalCharacterError" হিসাবে ত্রুটি পেয়েছি

কোড যে কাজ করেছে:

%pip install xlsxwriter
from pandas import ExcelWriter
import xlsxwriter
writer = ExcelWriter('notes.xlsx')
for key in dict_df:
        data[key].to_excel(writer, key,index=False,engine='xlsxwriter')
writer.save()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.