{"id":13747782,"url":"https://github.com/solegalli/feature_engine","last_synced_at":"2026-01-14T22:25:34.960Z","repository":{"id":47155134,"uuid":"394274826","full_name":"solegalli/feature_engine","owner":"solegalli","description":"Feature engineering package with sklearn like functionality","archived":false,"fork":true,"pushed_at":"2024-09-04T08:38:12.000Z","size":14617,"stargazers_count":55,"open_issues_count":1,"forks_count":14,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-30T03:53:10.279Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.trainindata.com/feature-engine","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"feature-engine/feature_engine","license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solegalli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"github":["feature-engine"]}},"created_at":"2021-08-09T12:02:48.000Z","updated_at":"2025-10-06T18:01:47.000Z","dependencies_parsed_at":"2023-01-29T18:00:54.103Z","dependency_job_id":null,"html_url":"https://github.com/solegalli/feature_engine","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/solegalli/feature_engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solegalli%2Ffeature_engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solegalli%2Ffeature_engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solegalli%2Ffeature_engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solegalli%2Ffeature_engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solegalli","download_url":"https://codeload.github.com/solegalli/feature_engine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solegalli%2Ffeature_engine/sbom","scorecard":{"id":836938,"data":{"date":"2025-08-11","repo":{"name":"github.com/solegalli/feature_engine","commit":"3e7b50e908e6748ea3cd97ed0f414643552fdb51"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"10 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: GHSA-6p56-wp2h-9hxr","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2020-73","Warn: Project is vulnerable to: PYSEC-2024-110 / GHSA-jw8x-6495-233v","Warn: Project is vulnerable to: GHSA-jxfp-4rvq-9h9m","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114","Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-23T19:18:48.464Z","repository_id":47155134,"created_at":"2025-08-23T19:18:48.464Z","updated_at":"2025-08-23T19:18:48.464Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28436313,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T21:32:52.117Z","status":"ssl_error","status_checked_at":"2026-01-14T21:32:33.442Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2024-08-03T07:00:19.386Z","updated_at":"2026-01-14T22:25:34.941Z","avatar_url":"https://github.com/solegalli.png","language":"Python","readme":"# Feature-engine\n\n[![feature-engine logo](https://raw.githubusercontent.com/feature-engine/feature_engine/main/docs/images/logo/FeatureEngine.png)](http://feature-engine.readthedocs.io)\n\n| | |\n| --- | --- |\n| Package | [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/feature_engine?logo=Python)](https://pypi.org/project/feature-engine/) [![PyPI](https://img.shields.io/pypi/v/feature_engine?logo=PyPI)](https://pypi.org/project/feature-engine) [![Conda](https://img.shields.io/conda/v/conda-forge/feature_engine?logo=Anaconda)](https://anaconda.org/conda-forge/feature_engine) [![Monthly Downloads](https://img.shields.io/pypi/dm/feature-engine)](https://img.shields.io/pypi/dm/feature-engine)  [![Downloads](https://static.pepy.tech/personalized-badge/feature-engine?period=total\u0026units=international_system\u0026left_color=grey\u0026right_color=green\u0026left_text=total-downloads%20(pypi))](https://pepy.tech/project/feature-engine)|\n| Meta | [![GitHub](https://img.shields.io/github/license/feature-engine/feature_engine)](https://github.com/feature-engine/feature_engine/blob/master/LICENSE.md) [![GitHub contributors](https://img.shields.io/github/contributors/feature-engine/feature_engine?logo=GitHub)](https://github.com/feature-engine/feature_engine/graphs/contributors) [![Gitter](https://img.shields.io/gitter/room/feature-engine/feaure_engine?logo=Gitter)](https://gitter.im/feature_engine/community) [![first-timers-only](https://img.shields.io/badge/first--timers--only-friendly-blue.svg?style=flat)](https://www.firsttimersonly.com/) [![Sponsorship](https://img.shields.io/badge/Powered%20By-TrainInData-orange.svg)](https://www.trainindata.com/) |\n| Documentation | [![Read the Docs](https://img.shields.io/readthedocs/feature_engine?logo=readthedocs)](https://feature-engine.readthedocs.io/en/latest/index.html) [![DOI](https://zenodo.org/badge/163630824.svg)](https://zenodo.org/badge/latestdoi/163630824) [![JOSS](https://joss.theoj.org/papers/10.21105/joss.03642/status.svg)](https://doi.org/10.21105/joss.03642) |\n| Testing | [![CircleCI](https://img.shields.io/circleci/build/github/feature-engine/feature_engine/main?logo=CircleCI)](https://app.circleci.com/pipelines/github/feature-engine/feature_engine) [![Codecov](https://img.shields.io/codecov/c/github/feature-engine/feature_engine?logo=CodeCov\u0026token=ZBKKSN6ERL)](https://codecov.io/github/feature-engine/feature_engine) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) |\n\u003cdiv align=\"center\"\u003e\n\n\n\u003c/div\u003e\n\nFeature-engine is a Python library with multiple transformers to engineer and select features for use in machine learning models. \nFeature-engine's transformers follow Scikit-learn's functionality with fit() and transform() methods to learn the \ntransforming parameters from the data and then transform it.\n\n\n## Feature-engine features in the following resources\n\n* [Feature Engineering for Machine Learning, Online Course](https://www.trainindata.com/p/feature-engineering-for-machine-learning)\n\n* [Feature Selection for Machine Learning, Online Course](https://www.trainindata.com/p/feature-selection-for-machine-learning)\n\n* [Feature Engineering for Time Series Forecasting, Online Course](https://www.trainindata.com/p/feature-engineering-for-forecasting)\n\n* [Forecasting with Machine Learning, Online Course](https://www.trainindata.com/p/forecasting-with-machine-learning)\n\n* [Python Feature Engineering Cookbook](https://www.packtpub.com/en-us/product/python-feature-engineering-cookbook-9781835883587)\n\n* [Feature Selection in Machine Learning Book](https://leanpub.com/feature-selection-in-machine-learning)\n\n\n## Blogs about Feature-engine\n\n* [Feature-engine: A new open-source Python package for feature engineering](https://trainindata.medium.com/feature-engine-a-new-open-source-python-package-for-feature-engineering-29a0ab88ea7c)\n\n* [Practical Code Implementations of Feature Engineering for Machine Learning with Python](https://towardsdatascience.com/practical-code-implementations-of-feature-engineering-for-machine-learning-with-python-f13b953d4bcd)\n\n\n## Documentation\n\n* [Documentation](https://feature-engine.trainindata.com)\n\n\n## Pst! How did you find us?\n\nWe want to share Feature-engine with more people. It'd help us loads if you tell us\nhow you discovered us.\n\nThen we'd know what we are doing right and which channels to use to share the love.\n\nPlease share your story by answering 1 quick question\n[at this link](https://docs.google.com/forms/d/e/1FAIpQLSfxvgnJvuvPf2XgosakhXo5VNQafqRrjNXkoW5qDWqnuxZNSQ/viewform?usp=sf_link)\n. 😃\n\n## Current Feature-engine's transformers include functionality for:\n\n* Missing Data Imputation\n* Categorical Encoding\n* Discretisation\n* Outlier Capping or Removal\n* Variable Transformation\n* Variable Creation\n* Variable Selection\n* Datetime Features\n* Time Series\n* Preprocessing\n* Scikit-learn Wrappers\n\n### Imputation Methods\n* MeanMedianImputer\n* ArbitraryNumberImputer\n* RandomSampleImputer\n* EndTailImputer\n* CategoricalImputer\n* AddMissingIndicator\n* DropMissingData\n\n### Encoding Methods\n* OneHotEncoder\n* OrdinalEncoder\n* CountFrequencyEncoder\n* MeanEncoder\n* WoEEncoder\n* RareLabelEncoder\n* DecisionTreeEncoder\n* StringSimilarityEncoder\n\n### Discretisation methods\n* EqualFrequencyDiscretiser\n* EqualWidthDiscretiser\n* GeometricWidthDiscretiser\n* DecisionTreeDiscretiser\n* ArbitraryDiscreriser\n\n### Outlier Handling methods\n* Winsorizer\n* ArbitraryOutlierCapper\n* OutlierTrimmer\n\n### Variable Transformation methods\n* LogTransformer\n* LogCpTransformer\n* ReciprocalTransformer\n* ArcsinTransformer\n* PowerTransformer\n* BoxCoxTransformer\n* YeoJohnsonTransformer\n\n### Variable Creation:\n * MathFeatures\n * RelativeFeatures\n * CyclicalFeatures\n * DecisionTreeFeatures()\n\n### Feature Selection:\n * DropFeatures\n * DropConstantFeatures\n * DropDuplicateFeatures\n * DropCorrelatedFeatures\n * SmartCorrelationSelection\n * ShuffleFeaturesSelector\n * SelectBySingleFeaturePerformance\n * SelectByTargetMeanPerformance\n * RecursiveFeatureElimination\n * RecursiveFeatureAddition\n * DropHighPSIFeatures\n * SelectByInformationValue\n * ProbeFeatureSelection\n\n### Datetime\n * DatetimeFeatures\n * DatetimeSubtraction\n \n### Time Series\n * LagFeatures\n * WindowFeatures\n * ExpandingWindowFeatures\n \n### Pipelines\n* Pipeline\n* make_pipeline\n\n### Preprocessing\n * MatchCategories\n * MatchVariables\n \n### Wrappers:\n * SklearnTransformerWrapper\n\n## Installation\n\nFrom PyPI using pip:\n\n```\npip install feature_engine\n```\n\nFrom Anaconda:\n\n```\nconda install -c conda-forge feature_engine\n```\n\nOr simply clone it:\n\n```\ngit clone https://github.com/feature-engine/feature_engine.git\n```\n\n## Example Usage\n\n```python\n\u003e\u003e\u003e import pandas as pd\n\u003e\u003e\u003e from feature_engine.encoding import RareLabelEncoder\n\n\u003e\u003e\u003e data = {'var_A': ['A'] * 10 + ['B'] * 10 + ['C'] * 2 + ['D'] * 1}\n\u003e\u003e\u003e data = pd.DataFrame(data)\n\u003e\u003e\u003e data['var_A'].value_counts()\n```\n\n```\nOut[1]:\nA    10\nB    10\nC     2\nD     1\nName: var_A, dtype: int64\n```\n    \n```python \n\u003e\u003e\u003e rare_encoder = RareLabelEncoder(tol=0.10, n_categories=3)\n\u003e\u003e\u003e data_encoded = rare_encoder.fit_transform(data)\n\u003e\u003e\u003e data_encoded['var_A'].value_counts()\n```\n\n```\nOut[2]:\nA       10\nB       10\nRare     3\nName: var_A, dtype: int64\n```\n\nFind more examples in our [Jupyter Notebook Gallery](https://nbviewer.org/github/feature-engine/feature-engine-examples/tree/main/) \nor in the [documentation](https://feature-engine.trainindata.com).\n\n## Contribute\n\nDetails about how to contribute can be found in the [Contribute Page](https://feature-engine.trainindata.com/en/latest/contribute/index.html)\n\nBriefly:\n\n- Fork the repo\n- Clone your fork into your local computer:\n```\ngit clone https://github.com/\u003cYOURUSERNAME\u003e/feature_engine.git\n```\n- navigate into the repo folder\n```\ncd feature_engine\n```\n- Install Feature-engine as a developer: \n```\npip install -e .\n```\n- Optional: Create and activate a virtual environment with any tool of choice\n- Install Feature-engine dependencies: \n```\npip install -r requirements.txt\n``` \nand \n```\npip install -r test_requirements.txt\n```\n- Create a feature branch with a meaningful name for your feature: \n```\ngit checkout -b myfeaturebranch\n```\n- Develop your feature, tests and documentation\n- Make sure the tests pass\n- Make a PR\n\nThank you!!\n\n\n### Documentation\n\nFeature-engine documentation is built using [Sphinx](https://www.sphinx-doc.org) and is hosted on [Read the Docs](https://readthedocs.org/).\n\nTo build the documentation make sure you have the dependencies installed: from the root directory: \n```\npip install -r docs/requirements.txt\n```\n\nNow you can build the docs using: \n```\nsphinx-build -b html docs build\n```\n\n\n## License\n\nThe content of this repository is licensed under a [BSD 3-Clause license](https://github.com/feature-engine/feature_engine/blob/main/LICENSE.md).\n\n## Sponsor us\n\n[Sponsor us](https://github.com/sponsors/feature-engine) and support further our \nmission to democratize machine learning and programming tools through open-source \nsoftware.\n","funding_links":["https://github.com/sponsors/feature-engine"],"categories":["Packages","Others","特征工程","Feature Engineering Automation","Feature Extraction"],"sub_categories":["General Feature Extraction"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolegalli%2Ffeature_engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolegalli%2Ffeature_engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolegalli%2Ffeature_engine/lists"}