From 999611c2542217877fa545aa94ad657fd7f40d9c Mon Sep 17 00:00:00 2001 From: Georg Brantegger Date: Fri, 10 Apr 2026 13:53:25 +0200 Subject: [PATCH] commit for sync --- .gitignore | 1 + LaTex/Ruder-IDs.csv | 79 +++++- LaTex/print_Ruder-IDs.pdf | Bin 21772 -> 29561 bytes .../create_oar_ID_csv_for_printing.ipynb | 198 +++++++++++++- .../enrich_oar_df_with_places_info.ipynb | 253 ++++++++++++++++++ 5 files changed, 508 insertions(+), 23 deletions(-) create mode 100644 Nextcloud_Material/enrich_oar_df_with_places_info.ipynb diff --git a/.gitignore b/.gitignore index 030381b..1d3a733 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ *.txt *temp/ *.xlsx +*.pdf ######################################################################################## # project specific gitignore entries diff --git a/LaTex/Ruder-IDs.csv b/LaTex/Ruder-IDs.csv index ec60834..251ae94 100644 --- a/LaTex/Ruder-IDs.csv +++ b/LaTex/Ruder-IDs.csv @@ -1,15 +1,66 @@ Ruder-ID -S-C2-H-201X-98-B-sk -S-C2-H-201X-97-B-sk -S-C2-H-201X-99-B-sk -S-C2-H-201X-96-B-sk -S-C2-H-201X-98-B-sk -S-C2-H-201X-97-B-sk -S-C2-H-201X-99-B-sk -S-C2-H-201X-96-B-sk -S-C2-H-201X-98-B-sk -S-C2-H-201X-97-B-sk -S-C2-H-201X-99-B-sk -S-C2-H-201X-96-B-sk -S-C2-H-201X-98-B-sk -S-C2-H-201X-97-B-sk +S-C2-M-19XX-01-B/S +S-Sw-M-201X-01-B/S +S-Sw-M-201X-02-B/S +S-Sw-M-201X-03-B/S +S-Sw-M-201X-04-B/S +S-Cr-M-200X-01-B/S +S-Cr-M-200X-02-B/S +S-Cr-M-200X-03-B/S +S-Cr-M-200X-04-B/S +S-Cr-M-200X-05-B/S +S-Cr-M-200X-06-B/S +S-Cr-M-200X-07-B/S +S-Cr-M-200X-08-B/S +S-Cr-M-200X-09-B/S +S-Cr-M-200X-10-B/S +S-Cr-M-200X-11-B/S +S-Cr-H-200X-01-B/S +S-Cr-H-200X-02-B/S +S-Cr-H-200X-03-B/S +S-Cr-H-200X-04-B/S +S-Cr-H-200X-05-B/S +S-C2-H-201X-01-B/S +S-C2-H-201X-02-B/S +S-C2-H-201X-03-B/S +S-C2-H-201X-04-B/S +S-C2-H-201X-05-B/S +S-C2-H-201X-06-B/S +S-C2-H-201X-07-B/S +S-C2-H-201X-08-B/S +S-C2-H-201X-09-B/S +S-C2-H-201X-10-B/S +S-C2-H-201X-11-B/S +S-C2-H-201X-12-B/S +S-C2-H-201X-13-B/S +S-C2-H-201X-14-B/S +S-C2-H-201X-15-B/S +S-C2-H-201X-16-B/S +S-C2-H-201X-17-B/S +S-C2-H-201X-20-B/S-sk +S-C2-H-201X-21-B/S-sk +S-C2-H-201X-22-B/S-sk +S-C2-H-201X-23-B/S-sk +S-C2-H-201X-24-B/S-sk +S-C2-H-201X-25-B/S-sk +S-C2-H-201X-26-B/S-sk +S-C2-H-202X-01-B/S-sk +S-C2-H-202X-02-B/S-sk +S-C2-H-202X-03-B/S-sk +R-Em-H-19XX-01/02 +R-Em-H-19XX-03/04 +R-Em-H-19XX-05/06 +R-Em-H-19XX-07/08 +R-Cr-H-200X-01/02 +R-Cr-H-200X-03/04 +R-Cr-H-200X-05/06 +R-Cr-H-200X-07/08 +R-Cr-H-200X-09/10 +R-Cr-H-200X-11/12 +R-Cr-H-200X-13/14 +R-C2-H-201X-01/02-sk +R-C2-H-201X-03/04-sk +R-C2-H-201X-05/06-sk +R-C2-H-201X-07/08-sk +R-C2-H-201X-09/10-sk +R-C2-H-201X-11/12-sk \ No newline at end of file diff --git a/LaTex/print_Ruder-IDs.pdf b/LaTex/print_Ruder-IDs.pdf index 74ec78c79d6706ef0f29f49039acb7b91d041547..997217159fd4a4e6fe1fcb7be6a0fb76723e78f3 100644 GIT binary patch delta 26985 zcmagFV{oTYm%Sa^=-9Sx+qP{xzo=u|Had34wyjRbPRGuhe&)gaXQt}?c23p(a!9=|_u46c$A5_lyqlcsKPx;#N9}EJuch9Ip2`;mnyq2AOG%1z)kqT6Tb* zkVe=3t+<*blUFRMh)`=XI#WYbf0=bc)ND|hoUhcdsrH&+%)k^pTv6q>{4jPsQlLdq z&HbdfMe>YJ=pTel=&mssGka4PS7$RLyT2<3<0MI7OkmC=BVcO4OsDmLAd=vme~|_gUr}lBG>R>G!m^8%a>ErDLmXQ zJVBSV(xceF&VI4$1m)<}*vZ-i-kKc)MKDLY4+zY*#eJqsEYoc_1*y{}pfvfEM_0m7 zK}Kg6Z1o*h{Fzz<^!N~c+@ZZW&+$5JxG@|zU$Bwcz=$2P#xPxJat*?zqXkjPL~dPVaD9C*vwuW-o zS2IatkgKO=^hFJ&I@=}LjPGcq{(-G2nrQwvkfb0G89==?=)c84B9m%cOJzqmTaXxQk>V3@ z4*h4zWu!5*WSSG%dwzfRGN!DCTRh-r=){MEhzcpERoAX3c3q%ax zX^|`TK_k3PE9*jHrRuL)#d%grKu>{c5 zQA&q9)#o%ujPvK^{ub#cXy5qURYY^onr?fM$p-SB3Mf$+lmlez8p^qCbBks>rJeEI=;N>S<@En69Es#~NPD=B(JbXFuk|T z7!9=qogA}SJK>lLDLkcA?g1wdO>Zx4%+#>A%wgnm@vB zI6jP)lEx@!rLV+QgC(cpf<3p-l{uHLYH!v4(@8r~21b^dn97CpqES%H!OBbQps7@= zbdn_1DYgWeY&wb*@+%;O@8d^zu5dUH0tFC7?A>Yw-lU6;JUYSE*iVO2`O=)Axf%IP-`9o!Pd@{ ze3wo@p_1<8OmJ&|Bj|%fvc-KDsDE&9x8F=N=_EOxL4o2D_2lW;%Kc@ip@Re4+&g1+ z3?+?4b~lhW+nzQt?&eZerbwhp8-cdYvlt|V&MG0BU4UokvGN=SaQHm`e!QgePs<3+ zn&7ZjuniH*WR|9DRO6aZL&PG*XtC<0I~zAJc_FZ9t3bD^((iD_BxfsfMiYK%%0D!F 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 diff --git a/Nextcloud_Material/create_oar_ID_csv_for_printing.ipynb b/Nextcloud_Material/create_oar_ID_csv_for_printing.ipynb index c0a22ab..76c6048 100644 --- a/Nextcloud_Material/create_oar_ID_csv_for_printing.ipynb +++ b/Nextcloud_Material/create_oar_ID_csv_for_printing.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "3a384a62", "metadata": {}, "outputs": [], @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "05055b94", "metadata": {}, "outputs": [], @@ -29,10 +29,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "13fb9852", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File loaded successfully!\n" + ] + } + ], "source": [ "# read list of boats\n", "\n", @@ -47,7 +55,8 @@ "\n", "if response.status_code == 200:\n", " # Use BytesIO to turn the raw binary content into a file-like object\n", - " oars_df = pd.read_excel(BytesIO(response.content))\n", + " oars_df = pd.read_excel(BytesIO(response.content),sheet_name='Ruder')\n", + " places_df = pd.read_excel(BytesIO(response.content),sheet_name='Bootsplatz_Zuordnung')\n", " print(\"File loaded successfully!\")\n", "else:\n", " print(f\"Failed to fetch file. Status code: {response.status_code}\")\n", @@ -56,10 +65,181 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "d6394323", + "execution_count": 29, + "id": "16e39eff", "metadata": {}, "outputs": [], + "source": [ + "printing_df = oars_df['Ruder-ID'].to_frame()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "28fcc50d", + "metadata": {}, + "outputs": [], + "source": [ + "def create_label_from_oar_id(row):\n", + " oar_id = row['Ruder-ID']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e3992d5c", + "metadata": {}, + "outputs": [], + "source": [ + "printing_df['label']=printing_df.apply(create_label_from_oar_id,axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "43132d73", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Ruder-IDlabel
0S-C2-M-19XX-01-BS-C2-M-19XX-01
1S-C2-M-19XX-01-SS-C2-M-19XX-01
2S-Sw-M-201X-01-BS-Sw-M-201X-01
3S-Sw-M-201X-01-SS-Sw-M-201X-01
4S-Sw-M-201X-02-BS-Sw-M-201X-02
.........
125R-C2-H-201X-08-B-skR-C2-H-201X-08-B
126R-C2-H-201X-09-S-skR-C2-H-201X-09-S
127R-C2-H-201X-10-B-skR-C2-H-201X-10-B
128R-C2-H-201X-11-S-skR-C2-H-201X-11-S
129R-C2-H-201X-12-B-skR-C2-H-201X-12-B
\n", + "

130 rows × 2 columns

\n", + "
" + ], + "text/plain": [ + " Ruder-ID label\n", + "0 S-C2-M-19XX-01-B S-C2-M-19XX-01\n", + "1 S-C2-M-19XX-01-S S-C2-M-19XX-01\n", + "2 S-Sw-M-201X-01-B S-Sw-M-201X-01\n", + "3 S-Sw-M-201X-01-S S-Sw-M-201X-01\n", + "4 S-Sw-M-201X-02-B S-Sw-M-201X-02\n", + ".. ... ...\n", + "125 R-C2-H-201X-08-B-sk R-C2-H-201X-08-B\n", + "126 R-C2-H-201X-09-S-sk R-C2-H-201X-09-S\n", + "127 R-C2-H-201X-10-B-sk R-C2-H-201X-10-B\n", + "128 R-C2-H-201X-11-S-sk R-C2-H-201X-11-S\n", + "129 R-C2-H-201X-12-B-sk R-C2-H-201X-12-B\n", + "\n", + "[130 rows x 2 columns]" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "printing_df" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "d6394323", + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'Ruder-ID'", + "output_type": "error", + "traceback": [ + "\u001b[31m---------------------------------------------------------------------------\u001b[39m", + "\u001b[31mKeyError\u001b[39m Traceback (most recent call last)", + "\u001b[36mFile \u001b[39m\u001b[32m~/Desktop/Coding local/Python-RV/.venv/lib/python3.13/site-packages/pandas/core/indexes/base.py:3641\u001b[39m, in \u001b[36mIndex.get_loc\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 3640\u001b[39m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[32m-> \u001b[39m\u001b[32m3641\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[43m.\u001b[49m\u001b[43m_engine\u001b[49m\u001b[43m.\u001b[49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[32m 3642\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "\u001b[36mFile \u001b[39m\u001b[32mpandas/_libs/index.pyx:168\u001b[39m, in \u001b[36mpandas._libs.index.IndexEngine.get_loc\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m--> \u001b[39m\u001b[32m168\u001b[39m \u001b[33m'Could not get source, probably due dynamically evaluated source code.'\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32mpandas/_libs/index.pyx:197\u001b[39m, in \u001b[36mpandas._libs.index.IndexEngine.get_loc\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m--> \u001b[39m\u001b[32m197\u001b[39m \u001b[33m'Could not get source, probably due dynamically evaluated source code.'\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32mpandas/_libs/hashtable_class_helper.pxi:7668\u001b[39m, in \u001b[36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m-> \u001b[39m\u001b[32m7668\u001b[39m \u001b[33m'Could not get source, probably due dynamically evaluated source code.'\u001b[39m\n", + "\u001b[36mFile \u001b[39m\u001b[32mpandas/_libs/hashtable_class_helper.pxi:7676\u001b[39m, in \u001b[36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[39m\u001b[34m()\u001b[39m\n\u001b[32m-> \u001b[39m\u001b[32m7676\u001b[39m \u001b[33m'Could not get source, probably due dynamically evaluated source code.'\u001b[39m\n", + "\u001b[31mKeyError\u001b[39m: 'Ruder-ID'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[31mKeyError\u001b[39m Traceback (most recent call last)", + "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[6]\u001b[39m\u001b[32m, line 3\u001b[39m\n\u001b[32m 1\u001b[39m parent_folder = os.path.dirname(os.getcwd())\n\u001b[32m 2\u001b[39m target_path = os.path.join(parent_folder,\u001b[33m'LaTex'\u001b[39m,\u001b[33m'Ruder-IDs.csv'\u001b[39m)\n\u001b[32m----> \u001b[39m\u001b[32m3\u001b[39m oars_df[\u001b[33m'Ruder-ID'\u001b[39m].to_csv(target_path,index=\u001b[38;5;28;01mFalse\u001b[39;00m)\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Desktop/Coding local/Python-RV/.venv/lib/python3.13/site-packages/pandas/core/frame.py:4378\u001b[39m, in \u001b[36mDataFrame.__getitem__\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 4374\u001b[39m \n\u001b[32m 4375\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m is_single_key:\n\u001b[32m 4376\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m self.columns.nlevels > \u001b[32m1\u001b[39m:\n\u001b[32m 4377\u001b[39m \u001b[38;5;28;01mreturn\u001b[39;00m self._getitem_multilevel(key)\n\u001b[32m-> \u001b[39m\u001b[32m4378\u001b[39m indexer = self.columns.get_loc(key)\n\u001b[32m 4379\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n\u001b[32m 4380\u001b[39m indexer = [indexer]\n\u001b[32m 4381\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "\u001b[36mFile \u001b[39m\u001b[32m~/Desktop/Coding local/Python-RV/.venv/lib/python3.13/site-packages/pandas/core/indexes/base.py:3648\u001b[39m, in \u001b[36mIndex.get_loc\u001b[39m\u001b[34m(self, key)\u001b[39m\n\u001b[32m 3643\u001b[39m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(casted_key, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m (\n\u001b[32m 3644\u001b[39m \u001b[38;5;28misinstance\u001b[39m(casted_key, abc.Iterable)\n\u001b[32m 3645\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28misinstance\u001b[39m(x, \u001b[38;5;28mslice\u001b[39m) \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m casted_key)\n\u001b[32m 3646\u001b[39m ):\n\u001b[32m 3647\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m InvalidIndexError(key) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01merr\u001b[39;00m\n\u001b[32m-> \u001b[39m\u001b[32m3648\u001b[39m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[34;01merr\u001b[39;00m\n\u001b[32m 3649\u001b[39m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[32m 3650\u001b[39m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[32m 3651\u001b[39m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[32m 3652\u001b[39m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[32m 3653\u001b[39m \u001b[38;5;28mself\u001b[39m._check_indexing_error(key)\n", + "\u001b[31mKeyError\u001b[39m: 'Ruder-ID'" + ] + } + ], "source": [ "parent_folder = os.path.dirname(os.getcwd())\n", "target_path = os.path.join(parent_folder,'LaTex','Ruder-IDs.csv')\n", @@ -69,7 +249,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": ".venv (3.13.7)", "language": "python", "name": "python3" }, @@ -83,7 +263,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.3" + "version": "3.13.7" } }, "nbformat": 4, diff --git a/Nextcloud_Material/enrich_oar_df_with_places_info.ipynb b/Nextcloud_Material/enrich_oar_df_with_places_info.ipynb new file mode 100644 index 0000000..255e0af --- /dev/null +++ b/Nextcloud_Material/enrich_oar_df_with_places_info.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "3a384a62", + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "import pandas as pd\n", + "from io import BytesIO\n", + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "05055b94", + "metadata": {}, + "outputs": [], + "source": [ + "# --- Configuration ---\n", + "NEXTCLOUD_URL = \"https://nextcloud.karnelegger.eu\"\n", + "USERNAME = \"Georg Brantegger\"\n", + "with open('app_pw.txt','r') as f:\n", + " APP_PASSWORD = f.readline()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "13fb9852", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "File loaded successfully!\n" + ] + } + ], + "source": [ + "# read list of boats\n", + "\n", + "FILE_PATH = \"Shared/Ruderverein/Material/Ruderliste.xlsx\"\n", + "\n", + "# Build the WebDAV URL\n", + "# Note: Path should be URL-encoded if it contains spaces or special characters\n", + "webdav_url = f\"{NEXTCLOUD_URL}/remote.php/dav/files/{USERNAME}/{FILE_PATH}\"\n", + "\n", + "# --- The Request ---\n", + "response = requests.get(webdav_url, auth=(USERNAME, APP_PASSWORD))\n", + "\n", + "if response.status_code == 200:\n", + " # Use BytesIO to turn the raw binary content into a file-like object\n", + " oars_df = pd.read_excel(BytesIO(response.content),sheet_name='Ruder')\n", + " places_df = pd.read_excel(BytesIO(response.content),sheet_name='Bootsplatz_Zuordnung')\n", + " print(\"File loaded successfully!\")\n", + "else:\n", + " print(f\"Failed to fetch file. Status code: {response.status_code}\")\n", + " print(response.text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "16e39eff", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
BootsnameTrimmungBootsplatzRuder-ID 1Ruder-ID 2
0Angie1x1S-Cr-M-200X-07-XS-C2-H-201X-16-X
1Architekten Lechner4x1S-C2-H-201X-01-XNaN
2Architekten Lechner4x2S-C2-H-201X-02-XNaN
3Architekten Lechner4x3S-C2-H-201X-03-XNaN
4Architekten Lechner4x4S-C2-H-201X-04-XNaN
..................
108Villacher Faschingsgilde2x1NaNNaN
109Villacher Faschingsgilde2x2NaNNaN
110Villacher Faschingsgilde2-1NaNNaN
111Villacher Faschingsgilde2-2NaNNaN
112Zernatto1x1NaNNaN
\n", + "

113 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " Bootsname Trimmung Bootsplatz Ruder-ID 1 \\\n", + "0 Angie 1x 1 S-Cr-M-200X-07-X \n", + "1 Architekten Lechner 4x 1 S-C2-H-201X-01-X \n", + "2 Architekten Lechner 4x 2 S-C2-H-201X-02-X \n", + "3 Architekten Lechner 4x 3 S-C2-H-201X-03-X \n", + "4 Architekten Lechner 4x 4 S-C2-H-201X-04-X \n", + ".. ... ... ... ... \n", + "108 Villacher Faschingsgilde 2x 1 NaN \n", + "109 Villacher Faschingsgilde 2x 2 NaN \n", + "110 Villacher Faschingsgilde 2- 1 NaN \n", + "111 Villacher Faschingsgilde 2- 2 NaN \n", + "112 Zernatto 1x 1 NaN \n", + "\n", + " Ruder-ID 2 \n", + "0 S-C2-H-201X-16-X \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + ".. ... \n", + "108 NaN \n", + "109 NaN \n", + "110 NaN \n", + "111 NaN \n", + "112 NaN \n", + "\n", + "[113 rows x 5 columns]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv (3.13.7)", + "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.13.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}