diff --git a/.gitignore b/.gitignore index c953020f59342..495429fcde429 100644 --- a/.gitignore +++ b/.gitignore @@ -103,4 +103,5 @@ doc/source/index.rst doc/build/html/index.html # Windows specific leftover: doc/tmp.sv +doc/source/styled.xlsx doc/source/templates/ diff --git a/doc/source/_static/style-excel.png b/doc/source/_static/style-excel.png new file mode 100644 index 0000000000000..f946949e8bcf9 Binary files /dev/null and b/doc/source/_static/style-excel.png differ diff --git a/doc/source/style.ipynb b/doc/source/style.ipynb index 93323d046d495..40b692441e7dc 100644 --- a/doc/source/style.ipynb +++ b/doc/source/style.ipynb @@ -4,11 +4,11 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# HTML Styling\n", + "# Styling\n", "\n", "*New in version 0.17.1*\n", "\n", - "
*Provisional: This is a new feature and still under development. We'll be adding features and possibly making breaking changes in future releases. We'd love to hear your feedback.*
\n", + "*Provisional: This is a new feature and still under development. We'll be adding features and possibly making breaking changes in future releases. We'd love to hear your feedback.*\n", "\n", "This document is written as a Jupyter Notebook, and can be viewed or downloaded [here](http://nbviewer.ipython.org/github/pandas-dev/pandas/blob/master/doc/source/html-styling.ipynb).\n", "\n", @@ -49,7 +49,6 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true, "nbsphinx": "hidden" }, "outputs": [], @@ -62,9 +61,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -130,9 +127,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def color_negative_red(val):\n", @@ -186,9 +181,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "def highlight_max(s):\n", @@ -240,7 +233,7 @@ "source": [ "Above we used `Styler.apply` to pass in each column one at a time.\n", "\n", - "
*Debugging Tip*: If you're having trouble writing your style function, try just passing it into DataFrame.apply
. Internally, Styler.apply
uses DataFrame.apply
so the result should be the same.
DataFrame.apply
. Internally, Styler.apply
uses DataFrame.apply
so the result should be the same.\n",
"\n",
"What if you wanted to highlight just the maximum value in the entire table?\n",
"Use `.apply(function, axis=None)` to indicate that your function wants the entire table, not one column or row at a time. Let's try that next.\n",
@@ -251,9 +244,7 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "collapsed": true
- },
+ "metadata": {},
"outputs": [],
"source": [
"def highlight_max(data, color='yellow'):\n",
@@ -819,9 +810,7 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "collapsed": true
- },
+ "metadata": {},
"outputs": [],
"source": [
"def magnify():\n",
@@ -854,6 +843,53 @@
" .set_table_styles(magnify())"
]
},
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Export to Excel\n",
+ "\n",
+ "*New in version 0.20.0*\n",
+ "\n",
+ "*Experimental: This is a new feature and still under development. We'll be adding features and possibly making breaking changes in future releases. We'd love to hear your feedback.*\n",
+ "\n",
+ "Some support is available for exporting styled `DataFrames` to Excel worksheets using the `OpenPyXL` engine. CSS2.2 properties handled include:\n",
+ "\n",
+ "- `background-color`\n",
+ "- `border-style`, `border-width`, `border-color` and their {`top`, `right`, `bottom`, `left` variants}\n",
+ "- `color`\n",
+ "- `font-family`\n",
+ "- `font-style`\n",
+ "- `font-weight`\n",
+ "- `text-align`\n",
+ "- `text-decoration`\n",
+ "- `vertical-align`\n",
+ "- `white-space: nowrap`\n",
+ "\n",
+ "Only CSS2 named colors and hex colors of the form `#rgb` or `#rrggbb` are currently supported."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.style.\\\n",
+ " applymap(color_negative_red).\\\n",
+ " apply(highlight_max).\\\n",
+ " to_excel('styled.xlsx', engine='openpyxl')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A screenshot of the output:\n",
+ "\n",
+ "![Excel spreadsheet with styled DataFrame](_static/style-excel.png)\n"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -1039,8 +1075,7 @@
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.1"
+ "pygments_lexer": "ipython3"
}
},
"nbformat": 4,
diff --git a/doc/source/whatsnew/v0.20.0.txt b/doc/source/whatsnew/v0.20.0.txt
index f64f592e109a1..6802fceb99123 100644
--- a/doc/source/whatsnew/v0.20.0.txt
+++ b/doc/source/whatsnew/v0.20.0.txt
@@ -17,6 +17,7 @@ Highlights include:
- Improved user API when accessing levels in ``.groupby()``, see :ref:`here