{"id":29020445,"url":"https://github.com/mayasmess/panorma","last_synced_at":"2025-10-04T19:42:31.946Z","repository":{"id":174408894,"uuid":"649129348","full_name":"MayasMess/panorma","owner":"MayasMess","description":"⚡️A lightweight Python package (just over 50 lines of code) that enables you to create typed  models for Pandas DataFrames using classes. ","archived":false,"fork":false,"pushed_at":"2024-05-08T10:23:39.000Z","size":104,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-26T01:05:40.725Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MayasMess.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-06-03T21:51:48.000Z","updated_at":"2025-06-20T00:37:49.000Z","dependencies_parsed_at":"2025-06-26T01:05:42.173Z","dependency_job_id":"173ff3a5-6b18-4fc3-8889-f906cb3a15a2","html_url":"https://github.com/MayasMess/panorma","commit_stats":null,"previous_names":["mayasmess/panorma"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/MayasMess/panorma","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MayasMess%2Fpanorma","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MayasMess%2Fpanorma/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MayasMess%2Fpanorma/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MayasMess%2Fpanorma/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MayasMess","download_url":"https://codeload.github.com/MayasMess/panorma/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MayasMess%2Fpanorma/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278366609,"owners_count":25975091,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-26T01:05:39.476Z","updated_at":"2025-10-04T19:42:31.904Z","avatar_url":"https://github.com/MayasMess.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Panorma\nA lightweight Python package (just over 50 lines of code) that enables you to create typed \nmodels for Pandas DataFrames using classes. \n\nYou can easily define  structured models, enforce column typing, \nenjoy autocompletion, and catch invalid column errors early in your DataFrame operations. \n\nSimplify your data modeling and enhance the reliability of your DataFrame workflows.\n\nInstallation:\n- \n```shell script\n  pip install panorma\n```\nor\n```shell script\n  poetry add panorma\n```\n\nExample:\n-\n- Create some models:\n```python\nfrom panorma.fields import String, Int, Float, DateTime, Categorical\nfrom panorma.frames import DataFrame\n\nclass Users(DataFrame):\n    name: String\n    age: Int\n    percentage: Float\n    birth_date: DateTime\n\n\nclass Cars(DataFrame):\n    car: String\n    mpg: Float\n    cylinders: Int\n    displacement: Float\n    horsepower: Float\n    weight: Float\n    acceleration: Float\n    model: Int\n    origin: Categorical\n```\n\n- Instantiate your models as you instantiate a simple pandas dataframe\n\n```python\nimport pandas as pd\n\nusers = Users({\n    \"name\": ['john', 'kevin'],\n    \"age\": [99, 15],\n    \"percentage\": [0.8, 7.3],\n    \"birth_date\": [pd.Timestamp('20180310'), pd.Timestamp('20230910')],\n})\ncars = Cars(pd.read_csv('CAR_DATASET.csv'))\n```\n\n- You will get autocompletion for models columns and pandas at the same time\n![image](static/autocompletion.png)\n\n- If the columns of your data are not matching your model, you will get a NotMatchingFields exception:\n![image](static/columns_not_matching.png)\n\n- If a column cannot be cast to the type declared in the model, you will get a ParseError exception:\n![image](static/parse_impossible.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayasmess%2Fpanorma","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmayasmess%2Fpanorma","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmayasmess%2Fpanorma/lists"}