From 6f3e4c8b06f897a6e13ae017f06d189195e1def0 Mon Sep 17 00:00:00 2001 From: sdpython Date: Sat, 20 Sep 2014 16:56:05 +0200 Subject: [PATCH] ajout de la fonction dfs2excel --- _unittests/ut_td_2a/test_session_pandas.py | 44 +++++++++++++++++++ src/ensae_teaching_cs/__init__.py | 3 ++ src/ensae_teaching_cs/td_2a/__init__.py | 0 src/ensae_teaching_cs/td_2a/session_pandas.py | 42 ++++++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 _unittests/ut_td_2a/test_session_pandas.py create mode 100644 src/ensae_teaching_cs/td_2a/__init__.py create mode 100644 src/ensae_teaching_cs/td_2a/session_pandas.py diff --git a/_unittests/ut_td_2a/test_session_pandas.py b/_unittests/ut_td_2a/test_session_pandas.py new file mode 100644 index 000000000..eb0c56b97 --- /dev/null +++ b/_unittests/ut_td_2a/test_session_pandas.py @@ -0,0 +1,44 @@ +""" +@brief test log(time=1s) + +You should indicate a time in seconds. The program ``run_unittests.py`` +will sort all test files by increasing time and run them. +""" + + +import sys, os, unittest, pandas + + +try : + import src + import pyquickhelper +except ImportError : + path = os.path.normpath(os.path.abspath( os.path.join( os.path.split(__file__)[0], "..", ".."))) + if path not in sys.path : sys.path.append (path) + path = os.path.normpath(os.path.abspath( os.path.join( os.path.split(__file__)[0], "..", "..", "..", "pyquickhelper", "src"))) + if path not in sys.path : sys.path.append (path) + import src + import pyquickhelper + +from pyquickhelper import fLOG +from src.ensae_teaching_cs import dfs2excel + + +class TestSessionPandas (unittest.TestCase): + + def test_excel(self) : + fLOG (__file__, self._testMethodName, OutputPrint = __name__ == "__main__") + + df1 = pandas.DataFrame( [ {"name":"xavier", "school":"ENSAE"}, + {"name":"antoine", "school":"ENSAE"} ] ) + + df2 = pandas.DataFrame( [ {"name":"xavier", "company":"Microsoft"}, + {"name":"antoine", "company":"Alephd"} ] ) + + ef = os.path.abspath( os.path.join( os.path.dirname(__file__), "out_example.xlsx")) + if os.path.exists(ef) : os.remove(ef) + dfs2excel ( {"ecole":df1, "boite":df2 }, ef) + assert os.path.exists(ef) + +if __name__ == "__main__" : + unittest.main () diff --git a/src/ensae_teaching_cs/__init__.py b/src/ensae_teaching_cs/__init__.py index a0d8b426b..b92ed674c 100644 --- a/src/ensae_teaching_cs/__init__.py +++ b/src/ensae_teaching_cs/__init__.py @@ -10,3 +10,6 @@ __url__ = "http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx/index.html" __downloadUrl__ = "http://www.xavierdupre.fr/site2013/index_code.html#ensae_teaching_cs" __license__ = "BSD License" + + +from .td_2a.session_pandas import dfs2excel diff --git a/src/ensae_teaching_cs/td_2a/__init__.py b/src/ensae_teaching_cs/td_2a/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/ensae_teaching_cs/td_2a/session_pandas.py b/src/ensae_teaching_cs/td_2a/session_pandas.py new file mode 100644 index 000000000..680d329ea --- /dev/null +++ b/src/ensae_teaching_cs/td_2a/session_pandas.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +""" +@file +@brief quelques fonctions à propos de la première séance + +""" + +import pandas + +def dfs2excel(dfs:dict, excel_file:str): + """ + Aggrège plusieurs DataFrame dans un seul fichiers excel + + @param dfs dictionnaire ``{ feuille: dataframe }`` + @param excel_file nom du fichier Excel + @return ExcelWriter + + @example(Enregistrer plusieurs DataFrame dans un seul fichier Excel ?) + + Le code suivant enregistre deux DataFrame dans un seul fichier Excel. + @code + import pandas + writer = pandas.ExcelWriter('example.xlsx') + df1.to_excel(writer, 'Data 0') + df2.to_excel(writer, 'Data 1') + write.save() + @endcode + + Ou en utilisant cette fonction : + @code + + @endcode + dfs2excel( { 'Data 0':df1, 'Data 1':df2 }, "example.xlsx" ) + @endexample + """ + writer = pandas.ExcelWriter(excel_file) + for k,df in dfs.items(): + df.to_excel(writer, k) + writer.save() + return writer + + \ No newline at end of file