Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save fomightez/e926c030c6571d07e7630f6526e0b776 to your computer and use it in GitHub Desktop.
Save fomightez/e926c030c6571d07e7630f6526e0b776 to your computer and use it in GitHub Desktop.
Pandas dataframe to Pandas Styler Object to Microsoft WORD via HTML
{
"cells": [
{
"cell_type": "markdown",
"id": "260331a4-a19d-49ce-b6dc-4bf131f97ec6",
"metadata": {},
"source": [
"## Pandas dataframe to Pandas Styler Object to MS WORD via HTML\n",
"\n",
"see also bottom of [here](https://stackoverflow.com/a/78906808/8508004) and `Capture rich text and make separate HTML from Pandas dataframe for reports.ipynb`\n",
"\n",
"This is adapted from https://stackoverflow.com/a/62716643/8508004 and results in an Object in Microsoft Word that looks much like a typical Pandas Dataframe but the text can be selected and copied."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "bdfd5ccd-8423-4a91-bb6b-f9e398811c49",
"metadata": {},
"outputs": [],
"source": [
"# adapted from https://stackoverflow.com/a/62716643/8508004\n",
"def getTableHTML(df):\n",
" \n",
" \"\"\"\n",
" From https://stackoverflow.com/a/49687866/2007153\n",
" \n",
" Get a Jupyter like html of pandas dataframe\n",
" \n",
" \"\"\"\n",
"\n",
" styles = [\n",
" #table properties\n",
" dict(selector=\" \", \n",
" props=[(\"margin\",\"0\"),\n",
" (\"font-family\",'\"Helvetica\", \"Arial\", sans-serif'),\n",
" (\"border-collapse\", \"collapse\"),\n",
" (\"border\",\"none\"),\n",
" # (\"border\", \"2px solid #ccf\")\n",
" ]),\n",
"\n",
" #header color - optional\n",
" # dict(selector=\"thead\", \n",
" # props=[(\"background-color\",\"#cc8484\")\n",
" # ]),\n",
"\n",
" #background shading\n",
" dict(selector=\"tbody tr:nth-child(even)\",\n",
" props=[(\"background-color\", \"#fff\")]),\n",
" dict(selector=\"tbody tr:nth-child(odd)\",\n",
" props=[(\"background-color\", \"#eee\")]),\n",
"\n",
" #cell spacing\n",
" dict(selector=\"td\", \n",
" props=[(\"padding\", \".5em\")]),\n",
"\n",
" #header cell properties\n",
" dict(selector=\"th\", \n",
" props=[(\"font-size\", \"100%\"),\n",
" (\"text-align\", \"center\")]),\n",
"\n",
"\n",
" ]\n",
" return (df.style.set_table_styles(styles)).to_html()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "a1eb1427-8e38-49ad-8350-1ba177765ac6",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')\n",
"iris_start = iris.head(15)\n",
"s = getTableHTML(iris_start)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "ebbe01f5-ae6b-488e-82c4-87e98a9727c7",
"metadata": {},
"outputs": [],
"source": [
"%store s >like_pandas.html"
]
},
{
"cell_type": "markdown",
"id": "ac2acd3a-86bb-4aeb-bc95-818134984c78",
"metadata": {},
"source": [
"Let's see what that should sort of look like:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "dbbae2fe-e767-472d-b574-333c0a4aa90e",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\">\n",
"#T_f1205 {\n",
" margin: 0;\n",
" font-family: \"Helvetica\", \"Arial\", sans-serif;\n",
" border-collapse: collapse;\n",
" border: none;\n",
"}\n",
"#T_f1205 tbody tr:nth-child(even) {\n",
" background-color: #fff;\n",
"}\n",
"#T_f1205 tbody tr:nth-child(odd) {\n",
" background-color: #eee;\n",
"}\n",
"#T_f1205 td {\n",
" padding: .5em;\n",
"}\n",
"#T_f1205 th {\n",
" font-size: 100%;\n",
" text-align: center;\n",
"}\n",
"</style>\n",
"<table id=\"T_f1205\">\n",
" <thead>\n",
" <tr>\n",
" <th class=\"blank level0\" >&nbsp;</th>\n",
" <th id=\"T_f1205_level0_col0\" class=\"col_heading level0 col0\" >sepal_length</th>\n",
" <th id=\"T_f1205_level0_col1\" class=\"col_heading level0 col1\" >sepal_width</th>\n",
" <th id=\"T_f1205_level0_col2\" class=\"col_heading level0 col2\" >petal_length</th>\n",
" <th id=\"T_f1205_level0_col3\" class=\"col_heading level0 col3\" >petal_width</th>\n",
" <th id=\"T_f1205_level0_col4\" class=\"col_heading level0 col4\" >species</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row0\" class=\"row_heading level0 row0\" >0</th>\n",
" <td id=\"T_f1205_row0_col0\" class=\"data row0 col0\" >5.100000</td>\n",
" <td id=\"T_f1205_row0_col1\" class=\"data row0 col1\" >3.500000</td>\n",
" <td id=\"T_f1205_row0_col2\" class=\"data row0 col2\" >1.400000</td>\n",
" <td id=\"T_f1205_row0_col3\" class=\"data row0 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row0_col4\" class=\"data row0 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row1\" class=\"row_heading level0 row1\" >1</th>\n",
" <td id=\"T_f1205_row1_col0\" class=\"data row1 col0\" >4.900000</td>\n",
" <td id=\"T_f1205_row1_col1\" class=\"data row1 col1\" >3.000000</td>\n",
" <td id=\"T_f1205_row1_col2\" class=\"data row1 col2\" >1.400000</td>\n",
" <td id=\"T_f1205_row1_col3\" class=\"data row1 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row1_col4\" class=\"data row1 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row2\" class=\"row_heading level0 row2\" >2</th>\n",
" <td id=\"T_f1205_row2_col0\" class=\"data row2 col0\" >4.700000</td>\n",
" <td id=\"T_f1205_row2_col1\" class=\"data row2 col1\" >3.200000</td>\n",
" <td id=\"T_f1205_row2_col2\" class=\"data row2 col2\" >1.300000</td>\n",
" <td id=\"T_f1205_row2_col3\" class=\"data row2 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row2_col4\" class=\"data row2 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row3\" class=\"row_heading level0 row3\" >3</th>\n",
" <td id=\"T_f1205_row3_col0\" class=\"data row3 col0\" >4.600000</td>\n",
" <td id=\"T_f1205_row3_col1\" class=\"data row3 col1\" >3.100000</td>\n",
" <td id=\"T_f1205_row3_col2\" class=\"data row3 col2\" >1.500000</td>\n",
" <td id=\"T_f1205_row3_col3\" class=\"data row3 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row3_col4\" class=\"data row3 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row4\" class=\"row_heading level0 row4\" >4</th>\n",
" <td id=\"T_f1205_row4_col0\" class=\"data row4 col0\" >5.000000</td>\n",
" <td id=\"T_f1205_row4_col1\" class=\"data row4 col1\" >3.600000</td>\n",
" <td id=\"T_f1205_row4_col2\" class=\"data row4 col2\" >1.400000</td>\n",
" <td id=\"T_f1205_row4_col3\" class=\"data row4 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row4_col4\" class=\"data row4 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row5\" class=\"row_heading level0 row5\" >5</th>\n",
" <td id=\"T_f1205_row5_col0\" class=\"data row5 col0\" >5.400000</td>\n",
" <td id=\"T_f1205_row5_col1\" class=\"data row5 col1\" >3.900000</td>\n",
" <td id=\"T_f1205_row5_col2\" class=\"data row5 col2\" >1.700000</td>\n",
" <td id=\"T_f1205_row5_col3\" class=\"data row5 col3\" >0.400000</td>\n",
" <td id=\"T_f1205_row5_col4\" class=\"data row5 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row6\" class=\"row_heading level0 row6\" >6</th>\n",
" <td id=\"T_f1205_row6_col0\" class=\"data row6 col0\" >4.600000</td>\n",
" <td id=\"T_f1205_row6_col1\" class=\"data row6 col1\" >3.400000</td>\n",
" <td id=\"T_f1205_row6_col2\" class=\"data row6 col2\" >1.400000</td>\n",
" <td id=\"T_f1205_row6_col3\" class=\"data row6 col3\" >0.300000</td>\n",
" <td id=\"T_f1205_row6_col4\" class=\"data row6 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row7\" class=\"row_heading level0 row7\" >7</th>\n",
" <td id=\"T_f1205_row7_col0\" class=\"data row7 col0\" >5.000000</td>\n",
" <td id=\"T_f1205_row7_col1\" class=\"data row7 col1\" >3.400000</td>\n",
" <td id=\"T_f1205_row7_col2\" class=\"data row7 col2\" >1.500000</td>\n",
" <td id=\"T_f1205_row7_col3\" class=\"data row7 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row7_col4\" class=\"data row7 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row8\" class=\"row_heading level0 row8\" >8</th>\n",
" <td id=\"T_f1205_row8_col0\" class=\"data row8 col0\" >4.400000</td>\n",
" <td id=\"T_f1205_row8_col1\" class=\"data row8 col1\" >2.900000</td>\n",
" <td id=\"T_f1205_row8_col2\" class=\"data row8 col2\" >1.400000</td>\n",
" <td id=\"T_f1205_row8_col3\" class=\"data row8 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row8_col4\" class=\"data row8 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row9\" class=\"row_heading level0 row9\" >9</th>\n",
" <td id=\"T_f1205_row9_col0\" class=\"data row9 col0\" >4.900000</td>\n",
" <td id=\"T_f1205_row9_col1\" class=\"data row9 col1\" >3.100000</td>\n",
" <td id=\"T_f1205_row9_col2\" class=\"data row9 col2\" >1.500000</td>\n",
" <td id=\"T_f1205_row9_col3\" class=\"data row9 col3\" >0.100000</td>\n",
" <td id=\"T_f1205_row9_col4\" class=\"data row9 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row10\" class=\"row_heading level0 row10\" >10</th>\n",
" <td id=\"T_f1205_row10_col0\" class=\"data row10 col0\" >5.400000</td>\n",
" <td id=\"T_f1205_row10_col1\" class=\"data row10 col1\" >3.700000</td>\n",
" <td id=\"T_f1205_row10_col2\" class=\"data row10 col2\" >1.500000</td>\n",
" <td id=\"T_f1205_row10_col3\" class=\"data row10 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row10_col4\" class=\"data row10 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row11\" class=\"row_heading level0 row11\" >11</th>\n",
" <td id=\"T_f1205_row11_col0\" class=\"data row11 col0\" >4.800000</td>\n",
" <td id=\"T_f1205_row11_col1\" class=\"data row11 col1\" >3.400000</td>\n",
" <td id=\"T_f1205_row11_col2\" class=\"data row11 col2\" >1.600000</td>\n",
" <td id=\"T_f1205_row11_col3\" class=\"data row11 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row11_col4\" class=\"data row11 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row12\" class=\"row_heading level0 row12\" >12</th>\n",
" <td id=\"T_f1205_row12_col0\" class=\"data row12 col0\" >4.800000</td>\n",
" <td id=\"T_f1205_row12_col1\" class=\"data row12 col1\" >3.000000</td>\n",
" <td id=\"T_f1205_row12_col2\" class=\"data row12 col2\" >1.400000</td>\n",
" <td id=\"T_f1205_row12_col3\" class=\"data row12 col3\" >0.100000</td>\n",
" <td id=\"T_f1205_row12_col4\" class=\"data row12 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row13\" class=\"row_heading level0 row13\" >13</th>\n",
" <td id=\"T_f1205_row13_col0\" class=\"data row13 col0\" >4.300000</td>\n",
" <td id=\"T_f1205_row13_col1\" class=\"data row13 col1\" >3.000000</td>\n",
" <td id=\"T_f1205_row13_col2\" class=\"data row13 col2\" >1.100000</td>\n",
" <td id=\"T_f1205_row13_col3\" class=\"data row13 col3\" >0.100000</td>\n",
" <td id=\"T_f1205_row13_col4\" class=\"data row13 col4\" >setosa</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_f1205_level0_row14\" class=\"row_heading level0 row14\" >14</th>\n",
" <td id=\"T_f1205_row14_col0\" class=\"data row14 col0\" >5.800000</td>\n",
" <td id=\"T_f1205_row14_col1\" class=\"data row14 col1\" >4.000000</td>\n",
" <td id=\"T_f1205_row14_col2\" class=\"data row14 col2\" >1.200000</td>\n",
" <td id=\"T_f1205_row14_col3\" class=\"data row14 col3\" >0.200000</td>\n",
" <td id=\"T_f1205_row14_col4\" class=\"data row14 col4\" >setosa</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from IPython.display import HTML\n",
"display(HTML(s))"
]
},
{
"cell_type": "markdown",
"id": "cb720ed6-50c4-4438-bd6a-699a61858d52",
"metadata": {},
"source": [
"### Now to get that into Microsoft Word\n",
"\n",
"Use the file browser pane on the left to download `like_pandas.html` to your local computer.\n",
"\n",
"Open that downloaded file in Chrome.\n",
"\n",
"Click in the browser page and on Mac use `COMMAND+a` **to select all**. Copy that to clipboard via `COMMAND+C` on a Mac.\n",
"\n",
"With that in clipboard, go over to your MS Word document and right-click and choose '`Paste as Special...`' then select '`HTML Format`' from choices. \n",
"You should then have something in MS Word that looks much like the example above but probably with the text larger. You may want to select the text in it and reduce it to '8' to get something more like above.\n",
"\n",
"-----------\n",
"\n",
"Enjoy!\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment