From e040ab09f07b872dd11e90556967251f3f73a46e Mon Sep 17 00:00:00 2001 From: newinh Date: Wed, 15 Aug 2018 16:07:26 +0900 Subject: [PATCH 01/12] Expose ExcelWriter as part of the Generated API --- doc/source/api.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/api.rst b/doc/source/api.rst index 551b3eff10fa0..d121f23c0b8fc 100644 --- a/doc/source/api.rst +++ b/doc/source/api.rst @@ -60,6 +60,7 @@ Excel read_excel ExcelFile.parse + ExcelWriter JSON ~~~~ From 76edcde99f4d960d320dd1b050a21a69dd7cdd42 Mon Sep 17 00:00:00 2001 From: newinh Date: Fri, 17 Aug 2018 16:26:56 +0900 Subject: [PATCH 02/12] Add an exmaples section of ExcelWriter --- pandas/io/excel.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index e2db6643c5ef0..bac7a573e2180 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -826,6 +826,15 @@ class ExcelWriter(object): ----- For compatibility with CSV writers, ExcelWriter serializes lists and dicts to strings before writing. + + Examples + -------- + In order to write separate DataFrames to separate sheets + in a single Excel file, one can pass an ExcelWriter. + + >>> with ExcelWriter('path_to_file.xlsx') as writer: + ... df1.to_excel(writer, sheet_name='Sheet1') + ... df2.to_excel(writer, sheet_name='Sheet2') """ # Defining an ExcelWriter implementation (see abstract methods for more...) From a416f92daff6c7917733d51d92203254172c5e2e Mon Sep 17 00:00:00 2001 From: newinh Date: Fri, 17 Aug 2018 17:15:07 +0900 Subject: [PATCH 03/12] Use without_autosummary teamplate --- doc/source/api.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/source/api.rst b/doc/source/api.rst index d121f23c0b8fc..d2bc11adc4d11 100644 --- a/doc/source/api.rst +++ b/doc/source/api.rst @@ -60,6 +60,11 @@ Excel read_excel ExcelFile.parse + +.. autosummary:: + :toctree: generated/ + :template: autosummary/class_without_autosummary.rst + ExcelWriter JSON From 172257a772c8a507271ae94a72cb56e495dde44e Mon Sep 17 00:00:00 2001 From: newinh Date: Sun, 19 Aug 2018 01:58:09 +0900 Subject: [PATCH 04/12] Notice explicitly ExcelWriter hasn't public methods and properties --- pandas/io/excel.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index bac7a573e2180..1077b52b55d3e 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -824,17 +824,28 @@ class ExcelWriter(object): Notes ----- + None of methods and properties are considered public. + For compatibility with CSV writers, ExcelWriter serializes lists and dicts to strings before writing. Examples -------- + In order to write separate DataFrames to separate sheets in a single Excel file, one can pass an ExcelWriter. >>> with ExcelWriter('path_to_file.xlsx') as writer: ... df1.to_excel(writer, sheet_name='Sheet1') ... df2.to_excel(writer, sheet_name='Sheet2') + + Attributes + ---------- + None + + Methods + ------- + None """ # Defining an ExcelWriter implementation (see abstract methods for more...) From e218103e9a7c04c7ee3d8872e4c96b65d4838c86 Mon Sep 17 00:00:00 2001 From: newinh Date: Sun, 19 Aug 2018 01:59:18 +0900 Subject: [PATCH 05/12] Add example usases of ExcelWriter cass --- pandas/io/excel.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index 1077b52b55d3e..264c91b53e525 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -831,6 +831,19 @@ class ExcelWriter(object): Examples -------- + Using ExcelWriter, some settings can be added. + + Default usage. + + >>> with ExcelWriter('path_to_file.xlsx') as writer: + ... df.to_excel(writer) + + If you want to set engine that can manipulate Excel, + pass keyword argument named engine. Actually + engine is automatically chosen by file extension. + + >>> with ExcelWriter('path_to_file.xlsx', engine='openpyxl') as writer: + ... df.to_excel(writer) In order to write separate DataFrames to separate sheets in a single Excel file, one can pass an ExcelWriter. @@ -839,6 +852,21 @@ class ExcelWriter(object): ... df1.to_excel(writer, sheet_name='Sheet1') ... df2.to_excel(writer, sheet_name='Sheet2') + You can set date format or datetime format + + >>> with ExcelWriter('path_to_file.xlsx', + date_format='YYYY-MM-DD', + datetime_format='YYYY-MM-DD HH:MM:SS') as writer: + ... df.to_excel(writer) + + It also supports append mode. + + >>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer: + ... df.to_excel(writer) + + .. versionadded:: 0.24.0 + + Attributes ---------- None From b2f18805856291dbc4d7ec0c72caae94b921705b Mon Sep 17 00:00:00 2001 From: newinh Date: Sun, 19 Aug 2018 14:04:41 +0900 Subject: [PATCH 06/12] Align with to_excel method --- pandas/core/generic.py | 24 +++++++++++++++++++----- pandas/io/excel.py | 21 +++++---------------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 2245abd780edd..b4c94c48bf6bb 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1924,11 +1924,25 @@ def _repr_latex_(self): If you wish to write to more than one sheet in the workbook, it is necessary to specify an ExcelWriter object: - >>> writer = pd.ExcelWriter('output2.xlsx', engine='xlsxwriter') - >>> df1.to_excel(writer, sheet_name='Sheet1') - >>> df2 = df1.copy() - >>> df2.to_excel(writer, sheet_name='Sheet2') - >>> writer.save() + >>> with ExcelWriter('output.xlsx') as writer: + ... df1.to_excel(writer, sheet_name='Sheet_name_1') + ... df2.to_excel(writer, sheet_name='Sheet_name_2') + + If you want to set engine that can manipulate Excel, + pass keyword argument named engine. Actually + engine is automatically chosen by file extension: + + >>> df1.to_excel('output1.xlsx', engine='xlsxwriter') + >>> with ExcelWriter('output2.xlsx', engine='openpyxl') as writer: + ... df2.to_excel(writer) + + You can set date format or datetime format: + + >>> with ExcelWriter('path_to_file.xlsx', + date_format='YYYY-MM-DD', + datetime_format='YYYY-MM-DD HH:MM:SS') as writer: + ... df.to_excel(writer) + """ def to_json(self, path_or_buf=None, orient=None, date_format=None, diff --git a/pandas/io/excel.py b/pandas/io/excel.py index 264c91b53e525..ede55d21a70b0 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -824,49 +824,38 @@ class ExcelWriter(object): Notes ----- - None of methods and properties are considered public. + None of the methods and properties are considered public. For compatibility with CSV writers, ExcelWriter serializes lists and dicts to strings before writing. Examples -------- - Using ExcelWriter, some settings can be added. - - Default usage. + Default usage: >>> with ExcelWriter('path_to_file.xlsx') as writer: ... df.to_excel(writer) - If you want to set engine that can manipulate Excel, - pass keyword argument named engine. Actually - engine is automatically chosen by file extension. - - >>> with ExcelWriter('path_to_file.xlsx', engine='openpyxl') as writer: - ... df.to_excel(writer) - - In order to write separate DataFrames to separate sheets - in a single Excel file, one can pass an ExcelWriter. + To write to separate sheets in a single file: >>> with ExcelWriter('path_to_file.xlsx') as writer: ... df1.to_excel(writer, sheet_name='Sheet1') ... df2.to_excel(writer, sheet_name='Sheet2') - You can set date format or datetime format + You can set date format or datetime format: >>> with ExcelWriter('path_to_file.xlsx', date_format='YYYY-MM-DD', datetime_format='YYYY-MM-DD HH:MM:SS') as writer: ... df.to_excel(writer) - It also supports append mode. + You can also append to an existing Excel file: >>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer: ... df.to_excel(writer) .. versionadded:: 0.24.0 - Attributes ---------- None From 04b59a509c93f19fdcb03031b369a0c089955409 Mon Sep 17 00:00:00 2001 From: newinh Date: Tue, 21 Aug 2018 02:43:17 +0900 Subject: [PATCH 07/12] Fix Travis Ci build failed * Also Update some examples of to_excel method --- pandas/core/generic.py | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index b4c94c48bf6bb..08e9dde6eaf3b 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1917,6 +1917,12 @@ def _repr_latex_(self): ... columns=['col 1', 'col 2']) >>> df1.to_excel("output.xlsx") + If you want to set engine that can manipulate Excel, + pass keyword argument named engine. Actually + engine is automatically chosen by file extension: + + >>> df1.to_excel('output1.xlsx', engine='xlsxwriter') + To specify the sheet name: >>> df1.to_excel("output.xlsx", sheet_name='Sheet_name_1') @@ -1924,24 +1930,10 @@ def _repr_latex_(self): If you wish to write to more than one sheet in the workbook, it is necessary to specify an ExcelWriter object: - >>> with ExcelWriter('output.xlsx') as writer: + >>> with pd.ExcelWriter('output.xlsx') as writer: ... df1.to_excel(writer, sheet_name='Sheet_name_1') ... df2.to_excel(writer, sheet_name='Sheet_name_2') - If you want to set engine that can manipulate Excel, - pass keyword argument named engine. Actually - engine is automatically chosen by file extension: - - >>> df1.to_excel('output1.xlsx', engine='xlsxwriter') - >>> with ExcelWriter('output2.xlsx', engine='openpyxl') as writer: - ... df2.to_excel(writer) - - You can set date format or datetime format: - - >>> with ExcelWriter('path_to_file.xlsx', - date_format='YYYY-MM-DD', - datetime_format='YYYY-MM-DD HH:MM:SS') as writer: - ... df.to_excel(writer) """ From 546ce0a08160b6b869b5165e326a80d95e299f16 Mon Sep 17 00:00:00 2001 From: newinh Date: Tue, 21 Aug 2018 22:59:29 +0900 Subject: [PATCH 08/12] Change language expression of some exmples --- pandas/core/generic.py | 7 +++---- pandas/io/excel.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 08e9dde6eaf3b..8768697e7d746 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1917,9 +1917,9 @@ def _repr_latex_(self): ... columns=['col 1', 'col 2']) >>> df1.to_excel("output.xlsx") - If you want to set engine that can manipulate Excel, - pass keyword argument named engine. Actually - engine is automatically chosen by file extension: + To set the library that used to write the Excel file, + you can pass the `engine` keyword (the default engine is + automatically chosen depending on the file extension): >>> df1.to_excel('output1.xlsx', engine='xlsxwriter') @@ -1934,7 +1934,6 @@ def _repr_latex_(self): ... df1.to_excel(writer, sheet_name='Sheet_name_1') ... df2.to_excel(writer, sheet_name='Sheet_name_2') - """ def to_json(self, path_or_buf=None, orient=None, date_format=None, diff --git a/pandas/io/excel.py b/pandas/io/excel.py index ede55d21a70b0..fea58a223bd97 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -852,7 +852,7 @@ class ExcelWriter(object): You can also append to an existing Excel file: >>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer: - ... df.to_excel(writer) + ... df.to_excel(writer, sheet_name='Sheet3') .. versionadded:: 0.24.0 From b74364e5e49e8f8e4e682b82a75efb4bbc1e1bf9 Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Tue, 21 Aug 2018 17:34:04 +0200 Subject: [PATCH 09/12] typo --- pandas/core/generic.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index a5ed7a9033339..eb3dbb831f51a 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1917,12 +1917,6 @@ def _repr_latex_(self): ... columns=['col 1', 'col 2']) >>> df1.to_excel("output.xlsx") - To set the library that used to write the Excel file, - you can pass the `engine` keyword (the default engine is - automatically chosen depending on the file extension): - - >>> df1.to_excel('output1.xlsx', engine='xlsxwriter') - To specify the sheet name: >>> df1.to_excel("output.xlsx", sheet_name='Sheet_name_1') @@ -1934,6 +1928,12 @@ def _repr_latex_(self): ... df1.to_excel(writer, sheet_name='Sheet_name_1') ... df2.to_excel(writer, sheet_name='Sheet_name_2') + To set the library that is used to write the Excel file, + you can pass the `engine` keyword (the default engine is + automatically chosen depending on the file extension): + + >>> df1.to_excel('output1.xlsx', engine='xlsxwriter') + """ def to_json(self, path_or_buf=None, orient=None, date_format=None, From 40fd6fe8b85a71ca6ee7caa2efa04ebfb4a3d1b0 Mon Sep 17 00:00:00 2001 From: newinh Date: Wed, 22 Aug 2018 01:24:44 +0900 Subject: [PATCH 10/12] Fix doctest --- pandas/core/generic.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index eb3dbb831f51a..5a408cfae365d 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1926,6 +1926,7 @@ def _repr_latex_(self): >>> with pd.ExcelWriter('output.xlsx') as writer: ... df1.to_excel(writer, sheet_name='Sheet_name_1') + ... df2 = df1.copy() ... df2.to_excel(writer, sheet_name='Sheet_name_2') To set the library that is used to write the Excel file, From 1d0e83357a44d972f958f2701787762b33a16717 Mon Sep 17 00:00:00 2001 From: newinh Date: Wed, 22 Aug 2018 01:42:58 +0900 Subject: [PATCH 11/12] Use context manager cleary --- pandas/core/generic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 5a408cfae365d..2034fd4996566 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1924,9 +1924,9 @@ def _repr_latex_(self): If you wish to write to more than one sheet in the workbook, it is necessary to specify an ExcelWriter object: + >>> df2 = df1.copy() >>> with pd.ExcelWriter('output.xlsx') as writer: ... df1.to_excel(writer, sheet_name='Sheet_name_1') - ... df2 = df1.copy() ... df2.to_excel(writer, sheet_name='Sheet_name_2') To set the library that is used to write the Excel file, From e69316ff43a8fae1cf2bdab24456f3794870004c Mon Sep 17 00:00:00 2001 From: Joris Van den Bossche Date: Wed, 22 Aug 2018 11:30:44 +0200 Subject: [PATCH 12/12] remove versionadded --- pandas/io/excel.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index fea58a223bd97..00b4c704c681b 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -842,7 +842,7 @@ class ExcelWriter(object): ... df1.to_excel(writer, sheet_name='Sheet1') ... df2.to_excel(writer, sheet_name='Sheet2') - You can set date format or datetime format: + You can set the date format or datetime format: >>> with ExcelWriter('path_to_file.xlsx', date_format='YYYY-MM-DD', @@ -854,8 +854,6 @@ class ExcelWriter(object): >>> with ExcelWriter('path_to_file.xlsx', mode='a') as writer: ... df.to_excel(writer, sheet_name='Sheet3') - .. versionadded:: 0.24.0 - Attributes ---------- None