{"id":13737443,"url":"https://github.com/firmai/pandasvault","last_synced_at":"2025-05-06T18:20:48.312Z","repository":{"id":43454236,"uuid":"244091704","full_name":"firmai/pandasvault","owner":"firmai","description":"Advanced Pandas Vault — Utilities, Functions and Snippets (by @firmai).","archived":false,"fork":false,"pushed_at":"2022-03-01T21:04:19.000Z","size":3055,"stargazers_count":420,"open_issues_count":1,"forks_count":74,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-03-11T21:05:41.251Z","etag":null,"topics":["data-science","data-structures","dataframe","functions","pandas","python","snippets","table","tips"],"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/firmai.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}},"created_at":"2020-03-01T05:18:12.000Z","updated_at":"2025-03-11T19:07:33.000Z","dependencies_parsed_at":"2022-08-25T23:01:12.960Z","dependency_job_id":null,"html_url":"https://github.com/firmai/pandasvault","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firmai%2Fpandasvault","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firmai%2Fpandasvault/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firmai%2Fpandasvault/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firmai%2Fpandasvault/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firmai","download_url":"https://codeload.github.com/firmai/pandasvault/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252741727,"owners_count":21797074,"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","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":["data-science","data-structures","dataframe","functions","pandas","python","snippets","table","tips"],"created_at":"2024-08-03T03:01:48.064Z","updated_at":"2025-05-06T18:20:48.296Z","avatar_url":"https://github.com/firmai.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\n# **PandasVault** ⁠— Advanced Pandas Functions and Code Snippets\n\nThe only Pandas utility package you would ever need. It has no exotic external dependencies. All functions have been compared and tested with alternatives, only the fastest equivalent functions have been developed and included in this package. The package has more than 20 wrapped functions and 100 snippets. \n\n---------\n\n\n[`Github PandasVault Link`](https://github.com/firmai/pandasvault), [`LinkedIn`](https://www.linkedin.com/company/firmai)\n\nYou have the option to view this [Readme](https://github.com/firmai/pandasvault/blob/master/pandasvault.md) or run a [Colab](https://colab.research.google.com/drive/1TRKHPGfQnE2yw6_VPBJZ3nZ8lIPQYiuP) Notebook. \n\n```python\npip install pandasvault\n```\n\nIf you can identify performance improvements, or improvements in code length and styling, please open a pull request. This package is new, all help and criticisms are appreciated. I would love to hear about any additional function ideas. If you have a **function to contribute** please open an issues tab or email me at d.snow(at)nyu.edu. \n\n\n\n## List of Code\n\n\n#### [Table Processing](#table-processing)\n  -\t[\u003cfont color=\"black\"\u003eConfigure Pandas\u003c/font\u003e](#configure-pandas)\n  -\t[\u003cfont color=\"black\"\u003eData Frame Formatting\u003c/font\u003e](#data-frame-formatting)\n  -\t[\u003cfont color=\"black\"\u003eData Frames for Testing\u003c/font\u003e](#data-frames-for-testing)\n  -\t[\u003cfont color=\"black\"\u003eLower Case Columns\u003c/font\u003e](#lower-case-columns)\n  -\t[\u003cfont color=\"black\"\u003eFront and Back Column Selection\u003c/font\u003e](#front-and-back-columns)\n  -\t[\u003cfont color=\"black\"\u003eFast Data Frame Split\u003c/font\u003e](#fast-data-frame-split)\n  -\t[\u003cfont color=\"black\"\u003eCreate Features and Labels List\u003c/font\u003e](#create-features-and-labels-list)\n  -\t[\u003cfont color=\"black\"\u003eShort Basic Commands\u003c/font\u003e](#short-basic-commands)\n  -\t[\u003cfont color=\"black\"\u003eRead Commands\u003c/font\u003e](#read-commands)\n  -\t[\u003cfont color=\"black\"\u003eCreate Ordered Categories\u003c/font\u003e](#create-ordered-categories)\n  -\t[\u003cfont color=\"black\"\u003eSelect Columns Based on Regex\u003c/font\u003e](#select-columns-based-on-regex)\n  -\t[\u003cfont color=\"black\"\u003eAccessing Group of Groupby Object\u003c/font\u003e](#accessing-group-of-groupby-object)\n  -\t[\u003cfont color=\"black\"\u003eMultiple External Selection Criteria\u003c/font\u003e](#multiple-external-selection-criteria)\n  -\t[\u003cfont color=\"black\"\u003eMemory Reduction Script\u003c/font\u003e](#memory-reduction-script)\n  -\t[\u003cfont color=\"black\"\u003eVerify Primary Key\u003c/font\u003e](#verify-primary-key)\n  -\t[\u003cfont color=\"black\"\u003eShift Columns to Front\u003c/font\u003e](#shift-columns-to-front)\n  -\t[\u003cfont color=\"black\"\u003eMultiple Column Assignment\u003c/font\u003e](#multiple-column-assignment)\n  -\t[\u003cfont color=\"black\"\u003eMethod Changing Technique\u003c/font\u003e](#method-chaning-event)\n  -\t[\u003cfont color=\"black\"\u003eLoad Multiple Files\u003c/font\u003e](#load-multiple-files)\n  -\t[\u003cfont color=\"black\"\u003eDrop Rows and Column Substring\u003c/font\u003e](#drop-rows-and-column-substring)\n  -\t[\u003cfont color=\"black\"\u003eExplode a Column\u003c/font\u003e](#explode-a-column)\n  -\t[\u003cfont color=\"black\"\u003eNest List Back into Column\u003c/font\u003e](#nest-list-back-into-column)\n  -\t[\u003cfont color=\"black\"\u003eSplit Cells with List\u003c/font\u003e](#split-cells-with-list)\n\n\n#### [Table Exploration](#table-exploration)\n\n  -\t[\u003cfont color=\"black\"\u003eGroupby Functionality\u003c/font\u003e](#groupby-functionality)\n  -\t[\u003cfont color=\"black\"\u003eCross Correlation Series Without Duplicates](#cross-correlation-series-without-duplicates)\n  -\t[\u003cfont color=\"black\"\u003eMissing Data Report\u003c/font\u003e](#missing-data-report)\n  -\t[\u003cfont color=\"black\"\u003eDuplicated Rows Report\u003c/font\u003e](#duplicated-rows-report)\n  -\t[\u003cfont color=\"black\"\u003eSkewness\u003c/font\u003e](#skewness)\n\n\n#### [Feature Processing](#feature-processing)\n\n  -\t[\u003cfont color=\"black\"\u003eRemove Correlated Pairs\u003c/font\u003e](#remove-correlated-pairs)\n  -\t[\u003cfont color=\"black\"\u003eReplace Infrequently Occurring Categories\u003c/font\u003e](#replace-infrequently-occuring-categories)\n  -\t[\u003cfont color=\"black\"\u003eQuasi-Constant Feature Detection\u003c/font\u003e](#quasi-constant-feature-detection)\n  -\t[\u003cfont color=\"black\"\u003eFilling Missing Values Separately\u003c/font\u003e](#filling-missing-values-separately)\n  -\t[\u003cfont color=\"black\"\u003eConditioned Column Value Replacement\u003c/font\u003e](#conditioned-column-value-replacement)\n  -\t[\u003cfont color=\"black\"\u003eRemove Non-numeric Values in Data Frame\u003c/font\u003e](#remove-non-numeric-values-in-data-frame)\n  -\t[\u003cfont color=\"black\"\u003eFeature Scaling, Normalisation, Standardisation\u003c/font\u003e](#feature-scaling-normalisation-standardisation)\n  -\t[\u003cfont color=\"black\"\u003eImpute Null with Tail Distribution\u003c/font\u003e](#impute-null-with-tail-distribution)\n  -\t[\u003cfont color=\"black\"\u003eDetect Outliers\u003c/font\u003e](#detect-outliers)\n  -\t[\u003cfont color=\"black\"\u003eWindzorise Outliers\u003c/font\u003e](#windsorize-outliers)\n  -\t[\u003cfont color=\"black\"\u003eDrop Outliers\u003c/font\u003e](#drop-outliers)\n  -\t[\u003cfont color=\"black\"\u003eImpute Outliers\u003c/font\u003e](#impute-outliers)\n\n#### [Feature Engineering](#feature-engineering)\n\n  -\t[\u003cfont color=\"black\"\u003eAutomated Dummy Encoding\u003c/font\u003e](#automate-dummy-encodings)\n  -\t[\u003cfont color=\"black\"\u003eBinarise Empty Columns\u003c/font\u003e](#binarise-empty-columns)\n  -\t[\u003cfont color=\"black\"\u003ePolynomials\u003c/font\u003e](#polynomials)\n  -\t[\u003cfont color=\"black\"\u003eTransformations\u003c/font\u003e](#transformations)\n  -\t[\u003cfont color=\"black\"\u003eGenetic Programming\u003c/font\u003e](#genetic-programming)\n  -\t[\u003cfont color=\"black\"\u003ePrincipal Component\u003c/font\u003e](#principal-component)\n  -\t[\u003cfont color=\"black\"\u003eMultiple Lags\u003c/font\u003e](#multiple-lags)\n  -\t[\u003cfont color=\"black\"\u003eMultiple Rolling\u003c/font\u003e](#multiple-rolling)\n  -\t[\u003cfont color=\"black\"\u003eDate Features\u003c/font\u003e](#data-features)\n  -\t[\u003cfont color=\"black\"\u003eHaversine Distance\u003c/font\u003e](#havervsine-distance)\n  -\t[\u003cfont color=\"black\"\u003eParse Address\u003c/font\u003e](#parse-address)\n  -\t[\u003cfont color=\"black\"\u003eProcessing Strings in Pandas\u003c/font\u003e](#processing-strings-in-pandas)\n  -\t[\u003cfont color=\"black\"\u003eFiltering Strings in Pandas\u003c/font\u003e](#filtering-strings-in-pandas)\n\n\n#### [Model Validation](#model-validation)\n\n  -\t[\u003cfont color=\"black\"\u003eClassification Metrics\u003c/font\u003e](#classification-metrics)\n\n--------------\n\n### List of Functions\n\n```python\nimport pandas as pd\nimport numpy as np\nimport pandasvault as pv\n\n\"\"\"TABLE PROCESSING\"\"\"\ndf = pv.list_shuff([\"target\",\"c\",\"d\"],df)\ndf = pv.reduce_mem_usage(df)\n\n\"\"\"TABLE EXPLORATION\"\"\"\ndf = pv.corr_list(df)\ndf = pv.missing_data(df)\n\n\"\"\"FEATURE PROCESSING\"\"\"\ndf = pv.drop_corr(df, thresh=0.1,keep_cols=[\"target\"])\ndf = pv.replace_small_cat(df,[\"cat\"])\nqconstant_col = pv.constant_feature_detect(data=df,threshold=0.9)\ndf_train, scl = pv.scaler(df,target=\"target\",cols_ignore=[\"a\"],type=\"MinMax\")\ndf_test = pv.scaler(df_test,scaler=scl,train=False, target=\"target\",cols_ignore=[\"a\"])\ndf = pv.impute_null_with_tail(df,cols=df.columns)\nindex,para = pv.outlier_detect(df,\"a\",threshold=0.5,method=\"IQR\")\ndf = pv.windsorization(data=df,col='a',para=para,strategy='both')\ndf = pv.impute_outlier(data=df,col='a', outlier_index=index,strategy='mean')\n\n\"\"\"FEATURE EXTRACTION\"\"\"\ndf = pv.auto_dummy(df, unique=3)\ndf = pv.binarise_empty(df, frac=0.6)\ndf = pv.polynomials(df, [\"a\",\"b\"]) \ndf = pv.transformations(df,[\"a\",\"b\"])\ndf = pv.pca_feature(df,variance_or_components=0.80,drop_cols=[\"target\",\"a\"])\ndf = pv.multiple_lags(df, start=1, end=2,columns=[\"a\",\"target\"])\ndf = pv.multiple_rolling(df, columns=[\"a\"])\ndf = pv.date_features(df, date=\"date_fake\")\ndf['distance_central'] = df.apply(pv.haversine_distance,axis=1)\n\n\"\"\"MODEL VALIDATION\"\"\"\nscores = pv.classification_scores(y_test, y_predict, y_prob)\n\n```\n\n\n## Functions and Snippets Applied\n--------------\n\n\n*If you are running the code \u003cmark\u003efor the first time load this\u003c/mark\u003e test dataframe:*\n\n\n```python\n!pip install pandasvault\n```\n\n\n```python\nimport pandas as pd\nimport numpy as np\nimport pandasvault as pv\n\nnp.random.seed(1)\n\"\"\"quick way to create a data frame for testing\"\"\" \ndf_test = pd.DataFrame(np.random.randn(3, 4), columns=['a', 'b', 'c', 'd']) \\\n    .assign(target=lambda x: (x['b']+x['a']/x['d'])*x['c'])\n```\n\n\u003ca name=\"table-processing\"\u003e\u003c/a\u003e\n\n### **Table Processing**\n\n\n---\n\n\n\n---\n\n\n\u003ca name=\"configure-pandas\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Configure Pandas (func)**\n\n\n\n---\n\n\n\n\n\n\n```python\nimport pandas as pd\n\ndef pd_config():\n    options = {\n        'display': {\n            'max_colwidth': 25,\n            'expand_frame_repr': False,  # Don't wrap to multiple pages\n            'max_rows': 14,\n            'max_seq_items': 50,         # Max length of printed sequence\n            'precision': 4,\n            'show_dimensions': False\n        },\n        'mode': {\n            'chained_assignment': None   # Controls SettingWithCopyWarning\n        }\n    }\n\n    for category, option in options.items():\n        for op, value in option.items():\n            pd.set_option(f'{category}.{op}', value)  # Python 3.6+\n\nif __name__ == '__main__':\n    pv.pd_config()\n\n```\n\n\u003cbr/\u003e\n\n\u003ca name=\"data-frame-formatting\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Data Frame Formatting**\n\n---\n\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"number\"] = [3,10,1]\n```\n\n\n```python\n\ndf_out = (\n  df.style.format({\"a\":\"${:.2f}\", \"target\":\"${:.5f}\"})\n .hide_index()\n .highlight_min(\"a\", color =\"red\")\n .highlight_max(\"a\", color =\"green\")\n .background_gradient(subset = \"target\", cmap =\"Blues\")\n .bar(\"number\", color = \"lightblue\", align = \"zero\")\n .set_caption(\"DF with different stylings\")\n) ; df_out\n\n```\n\n```See Colab for Output```\n\n\n\u003cbr/\u003e\n\u003ca name=\"data-frame-formatting\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Data Frames For Testing**\n\n---\n\n\n\n\n```python\ndf1 = pd.util.testing.makeDataFrame() # contains random values\nprint(\"Contains missing values\")\ndf2 = pd.util.testing.makeMissingDataframe() # contains missing values\nprint(\"Contains datetime values\")\ndf3 = pd.util.testing.makeTimeDataFrame() # contains datetime values\nprint(\"Contains mixed values\")\ndf4 = pd.util.testing.makeMixedDataFrame(); df4.head() # contains mixed values\n\n```\n\n    Contains missing values\n    Contains datetime values\n    Contains mixed values\n\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eA\u003c/th\u003e\n      \u003cth\u003eB\u003c/th\u003e\n      \u003cth\u003eC\u003c/th\u003e\n      \u003cth\u003eD\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003efoo1\u003c/td\u003e\n      \u003ctd\u003e2009-01-01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003efoo2\u003c/td\u003e\n      \u003ctd\u003e2009-01-02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e2.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003efoo3\u003c/td\u003e\n      \u003ctd\u003e2009-01-05\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e3.0\u003c/td\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003efoo4\u003c/td\u003e\n      \u003ctd\u003e2009-01-06\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e4.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003efoo5\u003c/td\u003e\n      \u003ctd\u003e2009-01-07\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"lower-case-columns\"\u003e\u003c/a\u003e\n\n\n**\u003e\u003e\u003e Lower Case Columns**\n\n\n---\n\n\n\n\n\n\n```python\n## Lower-case all DataFrame column names \ndf = df_test.copy() ; df\ndf.columns = [\"A\",\"BGs\",\"c\",\"dag\",\"Target\"]\n```\n\n\n```python\ndf.columns = map(str.lower, df.columns); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003ebgs\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003edag\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"front-and-back-columns\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Front and Back Column Selection**\n\n\n\n---\n\n\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef front(self, n):\n    return self.iloc[:, :n]\n\ndef back(self, n):\n    return self.iloc[:, -n:]\n\npd.back = back\npd.front = front\n\npd.back(df,2)\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"fast-data-frame-split\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Fast Data Frame Split**\n\n\n\n---\n\n\n\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ntest =  df.sample(frac=0.4)\ntrain = df[~df.isin(test)].dropna(); train\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"create-features-and-labels-list\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Create Features and Labels List**\n\n\n\n---\n\n\n\n\n\n\n```python\ndf = df_test.head()\ny = 'target'\nX = [name for name in df.columns if name not in [y, 'd']]\nprint('y =', y)\nprint('X =', X)\n```\n\n    y = target\n    X = ['a', 'b', 'c']\n\n\u003cbr/\u003e\n\n\u003ca name=\"short-basic-commands\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Short Basic Commands**\n\n\n\n---\n\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"category\"] = np.where( df[\"target\"]\u003e1, \"1\",  \"0\")\ndf[\"k\"] = df[\"category\"].astype(str) +\": \" + df[\"d\"].round(1).astype(str) \ndf = df.append(df, ignore_index=True) ; df.head()\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ecategory\u003c/th\u003e\n      \u003cth\u003ek\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1: -1.1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0: -0.8\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0: -2.1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1: -1.1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0: -0.8\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n\"\"\"set display width, col_width etc for interactive pandas session\"\"\" \npd.set_option('display.width', 200)\npd.set_option('display.max_colwidth', 20)\npd.set_option('display.max_rows', 100)\n           \n\"\"\"when you have an excel sheet with spaces in column names\"\"\"\ndf.columns = [c.lower().replace(' ', '_') for c in df.columns]\n\n\"\"\"Add prefix to all columns\"\"\"\ndf.add_prefix(\"1_\")\n\n\"\"\"Add suffix to all columns\"\"\"\ndf.add_suffix(\"_Z\")\n\n\"\"\"Droping column where missing values are above a threshold\"\"\"\ndf.dropna(thresh = len(df)*0.95, axis = \"columns\") \n\n\"\"\"Given a dataframe df to filter by a series [\"a\",\"b\"]:\"\"\" \ndf[df['category'].isin([\"1\",\"0\"])]\n\n\"\"\"filter by multiple conditions in a dataframe df\"\"\"\ndf[(df['a'] \u003e1) \u0026 (df['b'] \u003c1)]\n\n\"\"\"filter by conditions and the condition on row labels(index)\"\"\"\ndf[(df.a \u003e 0) \u0026 (df.index.isin([0, 1]))]\n\n\"\"\"regexp filters on strings (vectorized), use .* instead of *\"\"\"\ndf[df.category.str.contains(r'.*[0-9].*')]\n\n\"\"\"logical NOT is like this\"\"\"\ndf[~df.category.str.contains(r'.*[0-9].*')]\n\n\"\"\"creating complex filters using functions on rows\"\"\"\ndf[df.apply(lambda x: x['b'] \u003e x['c'], axis=1)]\n\n\"\"\"Pandas replace operation\"\"\"\ndf[\"a\"].round(2).replace(0.87, 17, inplace=True)\ndf[\"a\"][df[\"a\"] \u003c 4] = 19\n\n\"\"\"Conditionals and selectors\"\"\"\ndf.loc[df[\"a\"] \u003e 1, [\"a\",\"b\",\"target\"]]\n\n\"\"\"Selecting multiple column slices\"\"\"\ndf.iloc[:, np.r_[0:2, 4:5]] \n\n\"\"\"apply and map examples\"\"\"\ndf[[\"a\",\"b\",\"c\"]].applymap(lambda x: x+1)\n\n\"\"\"add 2 to row 3 and return the series\"\"\"\ndf[[\"a\",\"b\",\"c\"]].apply(lambda x: x[0]+2,axis=0)\n\n\"\"\"add 3 to col A and return the series\"\"\"\ndf.apply(lambda x: x['a']+1,axis=1)\n\n\"\"\" Split delimited values in a DataFrame column into two new columns \"\"\"\ndf['new1'], df['new2'] = zip(*df['k'].apply(lambda x: x.split(': ', 1)))\n\n\"\"\" Doing calculations with DataFrame columns that have missing values\n  In example below, swap in 0 for df['col1'] cells that contain null \"\"\" \ndf['new3'] = np.where(pd.isnull(df['b']),0,df['a']) + df['c']\n\n\"\"\" Exclude certain data type or include certain data types \"\"\"\ndf.select_dtypes(exclude=['O','float'])\ndf.select_dtypes(include=['int'])\n\n\"\"\"one liner to normalize a data frame\"\"\" \n(df[[\"a\",\"b\"]] - df[[\"a\",\"b\"]].mean()) / (df[[\"a\",\"b\"]].max() - df[[\"a\",\"b\"]].min())\n\n\"\"\"groupby used like a histogram to obtain counts on sub-ranges of a variable, pretty handy\"\"\" \ndf.groupby(pd.cut(df.a, range(0, 1, 2))).size()\n\n\"\"\"use a local variable use inside a query of pandas using @\"\"\"\nmean = df[\"a\"].mean()\ndf.query(\"a \u003e @mean\")\n\n\"\"\"Calculate the % of missing values in each column\"\"\"\ndf.isna().mean() \n\n\"\"\"Calculate the % of missing values in each row\"\"\"\nrows = df.isna().mean(axis=1) ; df.head()\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ecategory\u003c/th\u003e\n      \u003cth\u003ek\u003c/th\u003e\n      \u003cth\u003enew1\u003c/th\u003e\n      \u003cth\u003enew2\u003c/th\u003e\n      \u003cth\u003enew3\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e19.0\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1: -1.1\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e-1.1\u003c/td\u003e\n      \u003ctd\u003e18.4718\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e19.0\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0: -0.8\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e-0.8\u003c/td\u003e\n      \u003ctd\u003e20.7448\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e19.0\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0: -2.1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e-2.1\u003c/td\u003e\n      \u003ctd\u003e20.4621\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e19.0\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1: -1.1\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e-1.1\u003c/td\u003e\n      \u003ctd\u003e18.4718\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e19.0\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0: -0.8\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e-0.8\u003c/td\u003e\n      \u003ctd\u003e20.7448\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"read-commands\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e  Read Commands**\n\n\n\n\n\n\n---\n\n\n\n\n```python\ndf = pd.util.testing.makeMixedDataFrame()\ndf.to_csv(\"data.csv\") ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eA\u003c/th\u003e\n      \u003cth\u003eB\u003c/th\u003e\n      \u003cth\u003eC\u003c/th\u003e\n      \u003cth\u003eD\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003efoo1\u003c/td\u003e\n      \u003ctd\u003e2009-01-01\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003efoo2\u003c/td\u003e\n      \u003ctd\u003e2009-01-02\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e2.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003efoo3\u003c/td\u003e\n      \u003ctd\u003e2009-01-05\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e3.0\u003c/td\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003efoo4\u003c/td\u003e\n      \u003ctd\u003e2009-01-06\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e4.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003efoo5\u003c/td\u003e\n      \u003ctd\u003e2009-01-07\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n\"\"\"To avoid Unnamed: 0 when loading a previously saved csv with index\"\"\"\n\"\"\"To parse dates\"\"\"\n\"\"\"To set data types\"\"\"\n\ndf_out = pd.read_csv(\"data.csv\", index_col=0,\n                 parse_dates=['D'],\n                 dtype={\"c\":\"category\", \"B\":\"int64\"}).set_index(\"D\")\n\n\"\"\"Copy data to clipboard; like an excel copy and paste\ndf = pd.read_clipboard()\n\"\"\"\n\n\"\"\"Read table from website\ndf = pd.read_html(url, match=\"table_name\")\n\"\"\"\n\n\"\"\" Read pdf into dataframe ()\n!pip install tabula\nfrom tabula import read_pdf\ndf = read_pdf('test.pdf', pages='all')\n\"\"\"\ndf_out.head()\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eA\u003c/th\u003e\n      \u003cth\u003eB\u003c/th\u003e\n      \u003cth\u003eC\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003eD\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2009-01-01\u003c/th\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003efoo1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2009-01-02\u003c/th\u003e\n      \u003ctd\u003e1.0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003efoo2\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2009-01-05\u003c/th\u003e\n      \u003ctd\u003e2.0\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003efoo3\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2009-01-06\u003c/th\u003e\n      \u003ctd\u003e3.0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003efoo4\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2009-01-07\u003c/th\u003e\n      \u003ctd\u003e4.0\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003efoo5\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\u003cbr/\u003e\n\n\n\u003ca name=\"create-ordered-categories\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Create Ordered Categories**\n\n\n---\n\n\n\n```python\ndf = df_test.copy()\ndf[\"cats\"] = [\"bad\",\"good\",\"excellent\"]; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ecats\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003ebad\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003egood\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003eexcellent\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nimport pandas as pd\nfrom pandas.api.types import CategoricalDtype\n\nprint(\"Let's create our own categorical order.\")\ncat_type = CategoricalDtype([\"bad\", \"good\", \"excellent\"], ordered = True)\ndf[\"cats\"] = df[\"cats\"].astype(cat_type)\n\nprint(\"Now we can use logical sorting.\")\ndf = df.sort_values(\"cats\", ascending = True)\n\nprint(\"We can also filter this as if they are numbers.\")\ndf[df[\"cats\"] \u003e \"bad\"]\n\n```\n\n    Let's create our own categorical order.\n    Now we can use logical sorting.\n    We can also filter this as if they are numbers.\n\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ecats\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003egood\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003eexcellent\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"select-columns-based-on-regex\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Select Columns Based on Regex**\n\n\n---\n\n\n\n\n```python\ndf = df_test.head(); df\ndf.columns = [\"a_l\", \"b_l\", \"c_r\",\"d_r\",\"target\"]  ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea_l\u003c/th\u003e\n      \u003cth\u003eb_l\u003c/th\u003e\n      \u003cth\u003ec_r\u003c/th\u003e\n      \u003cth\u003ed_r\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndf_out = df.filter(regex=\"_l\",axis=1) ; df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea_l\u003c/th\u003e\n      \u003cth\u003eb_l\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"accessing-group-of-groupby-object\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Accessing Group of Groupby Object**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf = df.append(df, ignore_index=True)\ndf[\"groupie\"] = [\"falcon\",\"hawk\",\"hawk\",\"eagle\",\"falcon\",\"hawk\"]; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003egroupie\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003efalcon\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003ehawk\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003ehawk\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003eeagle\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003efalcon\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e5\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003ehawk\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ngbdf = df.groupby(\"groupie\")\nhawk = gbdf.get_group(\"hawk\").mean(); hawk\n```\n\n\n\n\n    a         0.5012\n    b        -0.9334\n    c         1.5563\n    d        -1.6272\n    target   -2.3938\n    dtype: float64\n\n\n\u003cbr/\u003e\n\n\u003ca name=\"multiple-external-selection-criteria\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Multiple External Selection Criteria**\n\n\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\n```\n\n\n```python\ncr1 = df[\"a\"] \u003e 0\ncr2 = df[\"b\"] \u003c 0\ncr3 = df[\"c\"] \u003e 0\ncr4 = df[\"d\"] \u003e-1\n\ndf[cr1 \u0026 cr2 \u0026 cr3 \u0026 cr4]\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"memory-reduction-script\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Memory Reduction Script (func)**\n\n\n\n---\n\n\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nimport gc\n\ndef reduce_mem_usage(df):\n    \"\"\" iterate through all the columns of a dataframe and modify the data type\n        to reduce memory usage.        \n    \"\"\"\n    start_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))\n    \n    for col in df.columns:\n        col_type = df[col].dtype\n        gc.collect()\n        if col_type != object:\n            c_min = df[col].min()\n            c_max = df[col].max()\n            if str(col_type)[:3] == 'int':\n                if c_min \u003e np.iinfo(np.int8).min and c_max \u003c np.iinfo(np.int8).max:\n                    df[col] = df[col].astype(np.int8)\n                elif c_min \u003e np.iinfo(np.int16).min and c_max \u003c np.iinfo(np.int16).max:\n                    df[col] = df[col].astype(np.int16)\n                elif c_min \u003e np.iinfo(np.int32).min and c_max \u003c np.iinfo(np.int32).max:\n                    df[col] = df[col].astype(np.int32)\n                elif c_min \u003e np.iinfo(np.int64).min and c_max \u003c np.iinfo(np.int64).max:\n                    df[col] = df[col].astype(np.int64)  \n            else:\n                if c_min \u003e np.finfo(np.float16).min and c_max \u003c np.finfo(np.float16).max:\n                    df[col] = df[col].astype(np.float16)\n                elif c_min \u003e np.finfo(np.float32).min and c_max \u003c np.finfo(np.float32).max:\n                    df[col] = df[col].astype(np.float32)\n                else:\n                    df[col] = df[col].astype(np.float64)\n        else:\n            df[col] = df[col].astype('category')\n\n    end_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n    print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n    \n    return df\ndf_out = pv.reduce_mem_usage(df); df_out\n```\n\n    Memory usage of dataframe is 0.00 MB\n    Memory usage after optimization is: 0.00 MB\n    Decreased by 36.3%\n\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6240\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5283\u003c/td\u003e\n      \u003ctd\u003e-1.0732\u003c/td\u003e\n      \u003ctd\u003e1.1230\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8652\u003c/td\u003e\n      \u003ctd\u003e-2.3008\u003c/td\u003e\n      \u003ctd\u003e1.7451\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-6.0000\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3191\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4619\u003c/td\u003e\n      \u003ctd\u003e-2.0605\u003c/td\u003e\n      \u003ctd\u003e-0.5908\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"verify-primary-key\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Verify Primary Key (func)**\n\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"first_d\"] = [0,1,2]\ndf[\"second_d\"] = [4,1,9] ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003efirst_d\u003c/th\u003e\n      \u003cth\u003esecond_d\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e4\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e2\u003c/td\u003e\n      \u003ctd\u003e9\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef verify_primary_key(df, column_list):\n    '''Verify if columns in column list can be treat as primary key'''\n\n    return df.shape[0] == df.groupby(column_list).size().reset_index().shape[0]\n\nverify_primary_key(df, [\"first_d\",\"second_d\"])\n```\n\n\n\n\n    True\n\n\n\u003cbr/\u003e\n\n\u003ca name=\"shift-columns-to-front\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Shift Columns to Front (func)**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef list_shuff(items, df):\n    \"Bring a list of columns to the front\"\n    cols = list(df)\n    for i in range(len(items)):\n        cols.insert(i, cols.pop(cols.index(items[i])))\n    df = df.loc[:, cols]\n    df.reset_index(drop=True, inplace=True)\n    return df\n\ndf_out = pv.list_shuff([\"target\",\"c\",\"d\"],df); df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"multiple-column-assignment\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Multiple Column Assignments**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndf_out = (df.assign(stringed = df[\"a\"].astype(str),\n            ounces = df[\"b\"]*12,#                                     this will allow yo set a title\n            galons = lambda df: df[\"a\"]/128)\n           .query(\"b \u003e -1\")\n           .style.set_caption(\"Average consumption\")) ; df_out\n\n```\n\n\n\n\n\u003ctable id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002\" \u003e\u003ccaption\u003eAverage consumption\u003c/caption\u003e\u003cthead\u003e    \u003ctr\u003e        \u003cth class=\"blank level0\" \u003e\u003c/th\u003e        \u003cth class=\"col_heading level0 col0\" \u003ea\u003c/th\u003e        \u003cth class=\"col_heading level0 col1\" \u003eb\u003c/th\u003e        \u003cth class=\"col_heading level0 col2\" \u003ec\u003c/th\u003e        \u003cth class=\"col_heading level0 col3\" \u003ed\u003c/th\u003e        \u003cth class=\"col_heading level0 col4\" \u003etarget\u003c/th\u003e        \u003cth class=\"col_heading level0 col5\" \u003estringed\u003c/th\u003e        \u003cth class=\"col_heading level0 col6\" \u003eounces\u003c/th\u003e        \u003cth class=\"col_heading level0 col7\" \u003egalons\u003c/th\u003e    \u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\n                \u003ctr\u003e\n                        \u003cth id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002level0_row0\" class=\"row_heading level0 row0\" \u003e0\u003c/th\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col0\" class=\"data row0 col0\" \u003e1.624\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col1\" class=\"data row0 col1\" \u003e-0.6118\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col2\" class=\"data row0 col2\" \u003e-0.5282\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col3\" class=\"data row0 col3\" \u003e-1.073\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col4\" class=\"data row0 col4\" \u003e1.123\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col5\" class=\"data row0 col5\" \u003e1.6243453636632417\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col6\" class=\"data row0 col6\" \u003e-7.341\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row0_col7\" class=\"data row0 col7\" \u003e0.01269\u003c/td\u003e\n            \u003c/tr\u003e\n            \u003ctr\u003e\n                        \u003cth id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002level0_row1\" class=\"row_heading level0 row1\" \u003e2\u003c/th\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col0\" class=\"data row1 col0\" \u003e0.319\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col1\" class=\"data row1 col1\" \u003e-0.2494\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col2\" class=\"data row1 col2\" \u003e1.462\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col3\" class=\"data row1 col3\" \u003e-2.06\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col4\" class=\"data row1 col4\" \u003e-0.591\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col5\" class=\"data row1 col5\" \u003e0.31903909605709857\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col6\" class=\"data row1 col6\" \u003e-2.992\u003c/td\u003e\n                        \u003ctd id=\"T_6d6167c4_627f_11ea_a8db_0242ac1c0002row1_col7\" class=\"data row1 col7\" \u003e0.002492\u003c/td\u003e\n            \u003c/tr\u003e\n    \u003c/tbody\u003e\u003c/table\u003e\n\n\u003cbr/\u003e\n\n\n\u003ca name=\"method-chaning-event\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Method Chaining Technique**\n\n\n\n---\n\n\n\n\n\n```python\ndf = df_test.copy()\ndf[df\u003edf.mean()]  = None ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n# with line continuation character\ndf_out = df.dropna(subset=[\"b\",\"c\"],how=\"all\") \\\n.loc[df[\"a\"]\u003e0] \\\n.round(2) \\\n.groupby([\"target\",\"b\"]).max() \\\n.unstack() \\\n.fillna(0) \\\n.rolling(1).sum() \\\n.reset_index() \\\n.stack() \\\n.ffill().bfill() \n\ndf_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth rowspan=\"2\" valign=\"top\"\u003e0\u003c/th\u003e\n      \u003cth\u003e-2.3\u003c/th\u003e\n      \u003ctd\u003e0.87\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e-6.0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003ctd\u003e0.87\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e0.0\u003c/td\u003e\n      \u003ctd\u003e-6.0\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\u003cbr/\u003e\n\n\n\u003ca name=\"load-multiple-files\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Load Multiple Files**\n\n\n\n---\n\n\n\n\n\n```python\nimport os\nos.makedirs(\"folder\",exist_ok=True,); df_test.to_csv(\"folder/first.csv\",index=False) ; df_test.to_csv(\"folder/last.csv\",index=False)\n```\n\n\n```python\nimport glob\nfiles = glob.glob('folder/*.csv')\ndfs = [pd.read_csv(fp) for fp in files]\ndf_out = pd.concat(dfs)\n```\n\n\n```python\ndf_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\u003cbr/\u003e\n\n\n\u003ca name=\"drop-rows-and-column-substring\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Drop Rows with Column Substring**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"string_feature\"] = [\"1xZoo\", \"Safe7x\", \"bat4\"]; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003estring_feature\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1xZoo\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003eSafe7x\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003ebat4\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nsubstring = [\"xZ\",\"7z\", \"tab4\"]\n\ndf_out = df[~df.string_feature.str.contains('|'.join(substring))]; df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003estring_feature\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003eSafe7x\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003ebat4\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"explode-a-column\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Unnest (Explode) a Column**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.head()\ndf[\"g\"] = [[str(a)+lista for a in range(4)] for lista in [\"a\",\"b\",\"c\"]]; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003eg\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e[0a, 1a, 2a, 3a]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e[0b, 1b, 2b, 3b]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e[0c, 1c, 2c, 3c]\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndf_out = df.explode(\"g\"); df_out.iloc[:5,:]\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003eg\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e0a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e2a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e3a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0b\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"nest-list-back-into-column\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Nest List Back into Column**\n\n\n---\n\n\n\n\n```python\n### Run above example first \ndf = df_out.copy()\n```\n\n\n```python\ndf_out['g'] = df_out.groupby(df_out.index)['g'].agg(list); df_out.head()\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003eg\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e[0a, 1a, 2a, 3a]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e[0a, 1a, 2a, 3a]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e[0a, 1a, 2a, 3a]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e[0a, 1a, 2a, 3a]\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e[0b, 1b, 2b, 3b]\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"split-cells-with-list\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Split Cells With Lists**\n\n\n---\n\n\n\n\n```python\ndf = df_test.head()\ndf[\"g\"] = [\",\".join([str(a)+lista for a in range(4)]) for lista in [\"a\",\"b\",\"c\"]]; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003eg\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e0a,1a,2a,3a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0b,1b,2b,3b\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e0c,1c,2c,3c\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndf_out = df.assign(g = df[\"g\"].str.split(\",\")).explode(\"g\"); df_out.head()\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003eg\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e0a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e2a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e3a\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0b\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\u003cbr/\u003e\n\n\n\u003ca name=\"table-exploration\"\u003e\u003c/a\u003e\n\n### **Table Exploration**\n\n\n\n---\n\n\n\n---\n\n\n\n\u003ca name=\"groupby-functionality\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Groupby Functionality**\n\n---\n\n\n\n\n```python\ndf = df_test.head() \ndf[\"gr\"] = [1, 1 , 0] ;df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003egr\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nIn [34]: gb.\u003cTAB\u003e  # noqa: E225, E999\ngb.agg        gb.boxplot    gb.cummin     gb.describe   gb.filter     \ngb.get_group  gb.height     gb.last       gb.median     gb.ngroups    \ngb.plot       gb.rank       gb.std        gb.transform  gb.aggregate  \ngb.count      gb.cumprod    gb.dtype      gb.first      gb.nth\ngb.groups     gb.hist       gb.max        gb.min        gb.gender        \ngb.prod       gb.resample   gb.sum        gb.var        gb.ohlc  \ngb.apply      gb.cummax     gb.cumsum     gb.fillna          \ngb.head       gb.indices    gb.mean       gb.name            \ngb.quantile   gb.size       gb.tail       gb.weight\n\n```\n\n\n```python\ndf_out = df.groupby('gr').agg([np.sum, np.mean, np.std]); df_out.iloc[:,:8]\n```\n\n\n\n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003ea\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003eb\u003c/th\u003e\n      \u003cth colspan=\"2\" halign=\"left\"\u003ec\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003egr\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e2.4898\u003c/td\u003e\n      \u003ctd\u003e1.2449\u003c/td\u003e\n      \u003ctd\u003e0.5367\u003c/td\u003e\n      \u003ctd\u003e-2.9133\u003c/td\u003e\n      \u003ctd\u003e-1.4566\u003c/td\u003e\n      \u003ctd\u003e1.1949\u003c/td\u003e\n      \u003ctd\u003e1.2166\u003c/td\u003e\n      \u003ctd\u003e0.6083\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"cross-correlation-series-without-duplicates\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Cross Correlation Series Without Duplicates (func)**\n\n\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef corr_list(df):\n\n  return  (df.corr()\n          .unstack()\n          .sort_values(kind=\"quicksort\",ascending=False)\n          .drop_duplicates().iloc[1:]); df_out\n          \npv.corr_list(df)\n```\n\n\n\n\n    b       target    0.9215\n    a       d         0.6605\n            target    0.3206\n    b       a        -0.0724\n    c       d        -0.1764\n            b        -0.4545\n    target  d        -0.4994\n    c       target   -0.7647\n    b       d        -0.7967\n    a       c        -0.8555\n    dtype: float64\n\n\n\u003cbr/\u003e\n\n\u003ca name=\"missing-data-report\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Missing Data Report (func)**\n\n\n\n---\n\n\n\n\n\n```python\ndf = df_test.copy()\ndf[df\u003edf.mean()]  = None ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n\ndef missing_data(data):\n    \"Create a dataframe with a percentage and count of missing values\"\n    total = data.isnull().sum().sort_values(ascending = False)\n    percent = (data.isnull().sum()/data.isnull().count()*100).sort_values(ascending = False)\n    return pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])\n\npv.df_out = missing_data(df); df_out\n```\n\n\n\n\n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003ea\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003eb\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003ec\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003ed\u003c/th\u003e\n      \u003cth colspan=\"3\" halign=\"left\"\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n      \u003cth\u003esum\u003c/th\u003e\n      \u003cth\u003emean\u003c/th\u003e\n      \u003cth\u003estd\u003c/th\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003egr\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003e\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e2.4898\u003c/td\u003e\n      \u003ctd\u003e1.2449\u003c/td\u003e\n      \u003ctd\u003e0.5367\u003c/td\u003e\n      \u003ctd\u003e-2.9133\u003c/td\u003e\n      \u003ctd\u003e-1.4566\u003c/td\u003e\n      \u003ctd\u003e1.1949\u003c/td\u003e\n      \u003ctd\u003e1.2166\u003c/td\u003e\n      \u003ctd\u003e0.6083\u003c/td\u003e\n      \u003ctd\u003e1.6072\u003c/td\u003e\n      \u003ctd\u003e-1.8342\u003c/td\u003e\n      \u003ctd\u003e-0.9171\u003c/td\u003e\n      \u003ctd\u003e0.2204\u003c/td\u003e\n      \u003ctd\u003e-4.8767\u003c/td\u003e\n      \u003ctd\u003e-2.4384\u003c/td\u003e\n      \u003ctd\u003e5.0361\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"duplicated-rows-report\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Duplicated Rows Report**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"a\"].iloc[2] = df[\"a\"].iloc[1]\ndf[\"b\"].iloc[2] = df[\"b\"].iloc[1] ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n# Get a report of all duplicate records in a dataframe, based on specific columns\ndf_out = df[df.duplicated(['a', 'b'], keep=False)] ; df_out\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"skewness\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Skewness (func)**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nfrom scipy.stats import skew\n\ndef display_skewness(data):\n    '''show skewness information\n\n        Parameters\n        ----------\n        data: pandas dataframe\n\n        Return\n        ------\n        df: pandas dataframe\n    '''\n    numeric_cols = data.columns[data.dtypes != 'object'].tolist()\n    skew_value = []\n\n    for i in numeric_cols:\n        skew_value += [skew(data[i])]\n    df = pd.concat(\n        [pd.Series(numeric_cols), pd.Series(data.dtypes[data.dtypes != 'object'].apply(lambda x: str(x)).values)\n            , pd.Series(skew_value)], axis=1)\n    df.columns = ['var_name', 'col_type', 'skew_value']\n\n    return df\n\ndisplay_skewness(df)\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003evar_name\u003c/th\u003e\n      \u003cth\u003ecol_type\u003c/th\u003e\n      \u003cth\u003eskew_value\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003ea\u003c/td\u003e\n      \u003ctd\u003efloat64\u003c/td\u003e\n      \u003ctd\u003e0.1963\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eb\u003c/td\u003e\n      \u003ctd\u003efloat64\u003c/td\u003e\n      \u003ctd\u003e-0.6210\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003ec\u003c/td\u003e\n      \u003ctd\u003efloat64\u003c/td\u003e\n      \u003ctd\u003e-0.6659\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003ed\u003c/td\u003e\n      \u003ctd\u003efloat64\u003c/td\u003e\n      \u003ctd\u003e-0.5427\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003etarget\u003c/td\u003e\n      \u003ctd\u003efloat64\u003c/td\u003e\n      \u003ctd\u003e-0.5418\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n\u003ca name=\"feature-processing\"\u003e\u003c/a\u003e\n\n### **Feature Processing**\n\n\n---\n\n\n\n---\n\n\n\u003ca name=\"remove-correlated-pairs\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Remove Correlated Pairs (func)**\n\n\n\n---\n\n\n\n\n\n\n\n```python\ndf= df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef drop_corr(df, thresh=0.99,keep_cols=[]):\n    df_corr = df.corr().abs()\n    upper = df_corr.where(np.triu(np.ones(df_corr.shape), k=1).astype(np.bool))\n    to_remove = [column for column in upper.columns if any(upper[column] \u003e thresh)] ## Change to 99% for selection\n    to_remove = [x for x in to_remove if x not in keep_cols]\n    df_corr = df_corr.drop(columns = to_remove)\n    return df.drop(to_remove,axis=1)\n\ndf_out = pv.drop_corr(df, thresh=0.1,keep_cols=[\"target\"]); df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"replace-infrequently-occuring-categories\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Replace Infrequently Occuring Categories**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf = df.append([df]*2)\ndf[\"cat\"] = [\"bat\",\"bat\",\"rat\",\"mat\",\"mat\",\"mat\",\"mat\",\"mat\",\"mat\"]; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ecat\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003ebat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003ebat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003erat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n\ndef replace_small_cat(df, columns, thresh=0.2, term=\"other\"):\n  for col in columns:\n\n    # Step 1: count the frequencies\n    frequencies = df[col].value_counts(normalize = True)\n\n  # Step 2: establish your threshold and filter the smaller categories\n\n    small_categories = frequencies[frequencies \u003c thresh].index\n\n    df[col] = df[col].replace(small_categories, \"Other\")\n    \n  return df\n\ndf_out = pv.replace_small_cat(df,[\"cat\"]); df_out.head()\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ecat\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003ebat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003ebat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003eOther\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003emat\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"quasi-constant-feature-detection\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Quasi-Constant Features Detection (func)**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"a\"] = 3 \n```\n\n\n```python\n\ndef constant_feature_detect(data,threshold=0.98):\n    \"\"\" detect features that show the same value for the \n    majority/all of the observations (constant/quasi-constant features)\n    \n    Parameters\n    ----------\n    data : pd.Dataframe\n    threshold : threshold to identify the variable as constant\n        \n    Returns\n    -------\n    list of variables names\n    \"\"\"\n    \n    data_copy = data.copy(deep=True)\n    quasi_constant_feature = []\n    for feature in data_copy.columns:\n        predominant = (data_copy[feature].value_counts() / np.float(\n                      len(data_copy))).sort_values(ascending=False).values[0]\n        if predominant \u003e= threshold:\n            quasi_constant_feature.append(feature)\n    print(len(quasi_constant_feature),' variables are found to be almost constant')    \n    return quasi_constant_feature\n\n# the original dataset has no constant variable\nqconstant_col = pv.constant_feature_detect(data=df,threshold=0.9)\ndf_out = df.drop(qconstant_col, axis=1) ; df_out\n```\n\n    1  variables are found to be almost constant\n\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n### I will take care of outliers separately\n```\n\u003cbr/\u003e\n\n\u003ca name=\"filling-missing-values-separately\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Filling Missing Values Separately**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[df\u003edf.mean()]  = None ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n# Clean up missing values in multiple DataFrame columns\ndict_fill = {'a': 4,\n              'b': 3,\n              'c': 5,\n              'd': 9999,\n              'target': \"False\"}\ndf = df.fillna(dict_fill) ;df\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e4.0000\u003c/td\u003e\n      \u003ctd\u003e3.0000\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e9999.0000\u003c/td\u003e\n      \u003ctd\u003eFalse\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e5.0000\u003c/td\u003e\n      \u003ctd\u003e9999.0000\u003c/td\u003e\n      \u003ctd\u003e-5.999\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e3.0000\u003c/td\u003e\n      \u003ctd\u003e5.0000\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eFalse\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"conditioned-column-value-replacement\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Conditioned Column Value Replacement**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\n# Set DataFrame column values based on other column values\ndf.loc[(df['a'] \u003e1 ) \u0026 (df['c'] \u003c0), ['target']] = np.nan ;df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\u003cbr/\u003e\n\n\n\u003ca name=\"remove-non-numeric-values-in-data-frame\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Remove Non-numeric Values in Data Frame**\n\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy().assign(target=lambda row: row[\"a\"].round(4).astype(str)+\"SC\"+row[\"b\"].round(4).astype(str))\ndf[\"a\"] = \"TI4560L\" + df[\"a\"].round(4).astype(str) ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eTI4560L1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.6243SC-0.6118\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eTI4560L0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e0.8654SC-2.3015\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003eTI4560L0.319\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e0.319SC-0.2494\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndf_out = df.replace('[^0-9]+', '', regex=True); df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e456016243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1624306118\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e456008654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e0865423015\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e45600319\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e031902494\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\u003cbr/\u003e\n\n\n\u003ca name=\"feature-scaling-normalisation-standardisation\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Feature Scaling, Normalisation, Standardisation (func)**\n\n\n\n---\n\n\n\n\n```python\ndf= df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.preprocessing import MinMaxScaler\n\ndef scaler(df,scaler=None,train=True, target=None, cols_ignore=None, type=\"Standard\"):\n\n  if cols_ignore:\n    hold = df[cols_ignore].copy()\n    df = df.drop(cols_ignore,axis=1)\n  if target:\n    x = df.drop([target],axis=1).values #returns a numpy array\n  else:\n    x = df.values\n  if train:\n    if type==\"Standard\":\n      scal = StandardScaler()\n    elif type==\"MinMax\":\n      scal = MinMaxScaler()\n    scal.fit(x)\n    x_scaled = scal.transform(x)\n  else:\n    x_scaled = scaler.transform(x)\n  \n  if target:\n    df_out = pd.DataFrame(x_scaled, index=df.index, columns=df.drop([target],axis=1).columns)\n    df_out[target]= df[target]\n  else:\n    df_out = pd.DataFrame(x_scaled, index=df.index, columns=df.columns)\n  \n  df_out = pd.concat((hold,df_out),axis=1)\n  if train:\n    return df_out, scal\n  else:\n    return df_out\n\ndf_out_train, scl = pv.scaler(df,target=\"target\",cols_ignore=[\"a\"],type=\"MinMax\")\ndf_out_test = pv.scaler(df_test,scaler=scl,train=False, target=\"target\",cols_ignore=[\"a\"]); df_out_test\n\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e0.8234\u003c/td\u003e\n      \u003ctd\u003e0.0000\u003c/td\u003e\n      \u003ctd\u003e0.76\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e0.0000\u003c/td\u003e\n      \u003ctd\u003e1.0000\u003c/td\u003e\n      \u003ctd\u003e1.00\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e1.0000\u003c/td\u003e\n      \u003ctd\u003e0.8756\u003c/td\u003e\n      \u003ctd\u003e0.00\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"impute-null-with-tail-distribution\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Impute Null with Tail Distribution (func)**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[df\u003edf.mean()]  = None ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef impute_null_with_tail(df,cols=[]):\n    \"\"\"\n    replacing the NA by values that are at the far end of the distribution of that variable\n    calculated by mean + 3*std\n    \"\"\"\n    \n    df = df.copy(deep=True)\n    for i in cols:\n        if df[i].isnull().sum()\u003e0:\n            df[i] = df[i].fillna(df[i].mean()+3*df[i].std())\n        else:\n            warn(\"Column %s has no missing\" % i)\n    return df    \n  \n\ndf_out = pv.impute_null_with_tail(df,cols=df.columns); df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.7512\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"detect-outliers\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Detect Outliers (func)**\n\n\n\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef outlier_detect(data,col,threshold=3,method=\"IQR\"):\n  \n    if method == \"IQR\":\n      IQR = data[col].quantile(0.75) - data[col].quantile(0.25)\n      Lower_fence = data[col].quantile(0.25) - (IQR * threshold)\n      Upper_fence = data[col].quantile(0.75) + (IQR * threshold)\n    if method == \"STD\":\n      Upper_fence = data[col].mean() + threshold * data[col].std()\n      Lower_fence = data[col].mean() - threshold * data[col].std()   \n    if method == \"OWN\":\n      Upper_fence = data[col].mean() + threshold * data[col].std()\n      Lower_fence = data[col].mean() - threshold * data[col].std() \n    if method ==\"MAD\":\n      median = data[col].median()\n      median_absolute_deviation = np.median([np.abs(y - median) for y in data[col]])\n      modified_z_scores = pd.Series([0.6745 * (y - median) / median_absolute_deviation for y in data[col]])\n      outlier_index = np.abs(modified_z_scores) \u003e threshold\n      print('Num of outlier detected:',outlier_index.value_counts()[1])\n      print('Proportion of outlier detected',outlier_index.value_counts()[1]/len(outlier_index))\n      return outlier_index, (median_absolute_deviation, median_absolute_deviation)\n\n\n    para = (Upper_fence, Lower_fence)\n    tmp = pd.concat([data[col]\u003eUpper_fence,data[col]\u003cLower_fence],axis=1)\n    outlier_index = tmp.any(axis=1)\n    print('Num of outlier detected:',outlier_index.value_counts()[1])\n    print('Proportion of outlier detected',outlier_index.value_counts()[1]/len(outlier_index))\n    \n    return outlier_index, para\n    \n\nindex,para = pv.outlier_detect(df,\"a\",threshold=0.5,method=\"IQR\")\nprint('Upper bound:',para[0],'\\nLower bound:',para[1])\n```\n\n    Num of outlier detected: 1\n    Proportion of outlier detected 0.3333333333333333\n    Upper bound: 1.5712030633954956 \n    Lower bound: 0.2658967957893529\n\n\u003cbr/\u003e\n\n\u003ca name=\"windsorize-outliers\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Windsorize Outliers (func)**\n\n\n\n\n\n\n---\n\n\n\n\n```python\n# RUN above example first\ndf = df_test.copy(); df\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef windsorization(data,col,para,strategy='both'):\n    \"\"\"\n    top-coding \u0026 bottom coding (capping the maximum of a distribution at an arbitrarily set value,vice versa)\n    \"\"\"\n\n    data_copy = data.copy(deep=True)  \n    if strategy == 'both':\n        data_copy.loc[data_copy[col]\u003epara[0],col] = para[0]\n        data_copy.loc[data_copy[col]\u003cpara[1],col] = para[1]\n    elif strategy == 'top':\n        data_copy.loc[data_copy[col]\u003epara[0],col] = para[0]\n    elif strategy == 'bottom':\n        data_copy.loc[data_copy[col]\u003cpara[1],col] = para[1]  \n    return data_copy\n\n\ndf_out = pv.windsorization(data=df,col='a',para=para,strategy='both'); df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.5712\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"drop-outiers\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Drop Outliers**\n\n\n\n\n\n\n---\n\n\n\n\n```python\n## run the top two examples\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndf_out = df[~index] ; df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"impute-outiers (func)\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Impute Outliers**\n\n\n\n\n\n\n---\n\n\n\n\n```python\ndef impute_outlier(data,col,outlier_index,strategy='mean'):\n    \"\"\"\n    impute outlier with mean/median/most frequent values of that variable.\n    \"\"\"\n\n    data_copy = data.copy(deep=True)\n    if strategy=='mean':\n        data_copy.loc[outlier_index,col] = data_copy[col].mean()\n    elif strategy=='median':\n        data_copy.loc[outlier_index,col] = data_copy[col].median()\n    elif strategy=='mode':\n        data_copy.loc[outlier_index,col] = data_copy[col].mode()[0]   \n        \n    return data_copy\n  \ndf_out = pv.impute_outlier(data=df,col='a', outlier_index=index,strategy='mean'); df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e0.9363\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\u003ca name=\"feature-engineering\"\u003e\u003c/a\u003e\n\n### **Feature Engineering**\n\n\n\n---\n\n\n\n---\n\n\n\n\u003ca name=\"automate-dummy-encodings\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Automated Dummy (one-hot) Encoding (func)**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[\"e\"] = np.where(df[\"c\"]\u003e df[\"a\"], 1,  2)\n```\n\n\n```python\ndef auto_dummy(df, unique=15):\n  # Creating dummies for small object uniques\n  if len(df)\u003cunique:\n    raise ValueError('unique is set higher than data lenght')\n  list_dummies =[]\n  for col in df.columns:\n      if (len(df[col].unique()) \u003c unique):\n          list_dummies.append(col)\n          print(col)\n  df_edit = pd.get_dummies(df, columns = list_dummies) # Saves original dataframe\n  #df_edit = pd.concat([df[[\"year\",\"qtr\"]],df_edit],axis=1)\n  return df_edit\n\ndf_out = pv.auto_dummy(df, unique=3); df_out\n```\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ee_1\u003c/th\u003e\n      \u003cth\u003ee_2\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"binarise-empty-columns\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Binarise Empty Columns (func)**\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy()\ndf[df\u003edf.mean()]  = None ; df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef binarise_empty(df, frac=80):\n  # Binarise slightly empty columns\n  this =[]\n  for col in df.columns:\n      if df[col].dtype != \"object\":\n          is_null = df[col].isnull().astype(int).sum()\n          if (is_null/df.shape[0]) \u003efrac: # if more than 70% is null binarise\n              print(col)\n              this.append(col)\n              df[col] = df[col].astype(float)\n              df[col] = df[col].apply(lambda x: 0 if (np.isnan(x)) else 1)\n  df = pd.get_dummies(df, columns = this) \n  return df\n\ndf_out = pv.binarise_empty(df, frac=0.6); df_out\n```\n\n    b\n    c\n    d\n    target\n\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb_0\u003c/th\u003e\n      \u003cth\u003eb_1\u003c/th\u003e\n      \u003cth\u003ec_0\u003c/th\u003e\n      \u003cth\u003ec_1\u003c/th\u003e\n      \u003cth\u003ed_0\u003c/th\u003e\n      \u003cth\u003ed_1\u003c/th\u003e\n      \u003cth\u003etarget_0\u003c/th\u003e\n      \u003cth\u003etarget_1\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eNaN\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e0\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"polynomials\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Polynomials (func)**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef polynomials(df, feature_list):\n  for feat in feature_list:\n    for feat_two in feature_list:\n      if feat==feat_two:\n        continue\n      else:\n       df[feat+\"/\"+feat_two] = df[feat]/(df[feat_two]-df[feat_two].min()) #zero division guard\n       df[feat+\"X\"+feat_two] = df[feat]*(df[feat_two])\n\n  return df\n\ndf_out = pv.polynomials(df, [\"a\",\"b\"]) ; df_out\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ea/b\u003c/th\u003e\n      \u003cth\u003eaXb\u003c/th\u003e\n      \u003cth\u003eb/a\u003c/th\u003e\n      \u003cth\u003ebXa\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e0.9613\u003c/td\u003e\n      \u003ctd\u003e-0.9937\u003c/td\u003e\n      \u003ctd\u003e-0.4687\u003c/td\u003e\n      \u003ctd\u003e-0.9937\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003einf\u003c/td\u003e\n      \u003ctd\u003e-1.9918\u003c/td\u003e\n      \u003ctd\u003e-4.2124\u003c/td\u003e\n      \u003ctd\u003e-1.9918\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e0.1555\u003c/td\u003e\n      \u003ctd\u003e-0.0796\u003c/td\u003e\n      \u003ctd\u003e-inf\u003c/td\u003e\n      \u003ctd\u003e-0.0796\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"transformations\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Transformations (func)**\n\n\n\n---\n\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\ndef transformations(df,features):\n  df_new = df[features]\n  df_new = df_new - df_new.min()\n\n  sqr_name = [str(fa)+\"_POWER_2\" for fa in df_new.columns]\n  log_p_name = [str(fa)+\"_LOG_p_one_abs\" for fa in df_new.columns]\n  rec_p_name = [str(fa)+\"_RECIP_p_one\" for fa in df_new.columns]\n  sqrt_name = [str(fa)+\"_SQRT_p_one\" for fa in df_new.columns]\n\n  df_sqr = pd.DataFrame(np.power(df_new.values, 2),columns=sqr_name, index=df.index)\n  df_log = pd.DataFrame(np.log(df_new.add(1).abs().values),columns=log_p_name, index=df.index)\n  df_rec = pd.DataFrame(np.reciprocal(df_new.add(1).values),columns=rec_p_name, index=df.index)\n  df_sqrt = pd.DataFrame(np.sqrt(df_new.abs().add(1).values),columns=sqrt_name, index=df.index)\n\n  dfs = [df, df_sqr, df_log, df_rec, df_sqrt]\n\n  df=  pd.concat(dfs, axis=1)\n\n  return df\n\ndf_out = pv.transformations(df,[\"a\",\"b\"]); df_out.iloc[:,:8]\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ea_POWER_2\u003c/th\u003e\n      \u003cth\u003eb_POWER_2\u003c/th\u003e\n      \u003cth\u003ea_LOG_p_one_abs\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1.7038\u003c/td\u003e\n      \u003ctd\u003e2.8554\u003c/td\u003e\n      \u003ctd\u003e0.8352\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e0.2985\u003c/td\u003e\n      \u003ctd\u003e0.0000\u003c/td\u003e\n      \u003ctd\u003e0.4359\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e0.0000\u003c/td\u003e\n      \u003ctd\u003e4.2114\u003c/td\u003e\n      \u003ctd\u003e0.0000\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"genetic-programming\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Genetic Programming**\n\n\n\n---\n\n\n\n\n```python\n! pip install gplearn\n```\n\n    Collecting gplearn\n    \u001b[?25l  Downloading https://files.pythonhosted.org/packages/43/6b/ee38cd74b32ad5056603aabbef622f9691f19d0869574dfc610034f18662/gplearn-0.4.1-py3-none-any.whl (41kB)\n    \u001b[K     |████████████████████████████████| 51kB 2.5MB/s \n    \u001b[?25hRequirement already satisfied: scikit-learn\u003e=0.20.0 in /usr/local/lib/python3.6/dist-packages (from gplearn) (0.22.1)\n    Requirement already satisfied: joblib\u003e=0.13.0 in /usr/local/lib/python3.6/dist-packages (from gplearn) (0.14.1)\n    Requirement already satisfied: numpy\u003e=1.11.0 in /usr/local/lib/python3.6/dist-packages (from scikit-learn\u003e=0.20.0-\u003egplearn) (1.17.5)\n    Requirement already satisfied: scipy\u003e=0.17.0 in /usr/local/lib/python3.6/dist-packages (from scikit-learn\u003e=0.20.0-\u003egplearn) (1.4.1)\n    Installing collected packages: gplearn\n    Successfully installed gplearn-0.4.1\n\n\n\n```python\ndf = df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nfrom gplearn.genetic import SymbolicTransformer\nfunction_set = ['add', 'sub', 'mul', 'div',\n                'sqrt', 'log', 'abs', 'neg', 'inv','tan']\n\ngp = SymbolicTransformer(generations=800, population_size=200,\n                         hall_of_fame=100, n_components=10,\n                         function_set=function_set,\n                         parsimony_coefficient=0.0005,\n                         max_samples=0.9, verbose=1,\n                         random_state=0, n_jobs=6)\n\ngen_feats = gp.fit_transform(df.drop(\"target\", axis=1), df[\"target\"]); df.iloc[:,:8]\ndf_out = pd.concat((df,pd.DataFrame(gen_feats, columns=[\"gen_\"+str(a) for a in range(gen_feats.shape[1])])),axis=1); df_out.iloc[:,:8]\n\n```\n\n        |   Population Average    |             Best Individual              |\n    ---- ------------------------- ------------------------------------------ ----------\n     Gen   Length          Fitness   Length          Fitness      OOB Fitness  Time Left\n       0    10.14             0.91       22                1                0     43.36m\n\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003egen_0\u003c/th\u003e\n      \u003cth\u003egen_1\u003c/th\u003e\n      \u003cth\u003egen_2\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e-1.8292\u003c/td\u003e\n      \u003ctd\u003e-2.6469\u003c/td\u003e\n      \u003ctd\u003e0.5059\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n      \u003ctd\u003e-3.5190\u003c/td\u003e\n      \u003ctd\u003e99.1619\u003c/td\u003e\n      \u003ctd\u003e3.6243\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n      \u003ctd\u003e-1.4668\u003c/td\u003e\n      \u003ctd\u003e1.3677\u003c/td\u003e\n      \u003ctd\u003e3.1826\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\u003cbr/\u003e\n\n\u003ca name=\"principal-component\"\u003e\u003c/a\u003e\n\n**\u003e\u003e\u003e Prinicipal Component Features (func)**\n\n\n\n\n---\n\n\n\n\n```python\ndf =df_test.copy(); df\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003eb\u003c/th\u003e\n      \u003cth\u003ec\u003c/th\u003e\n      \u003cth\u003ed\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n      \u003ctd\u003e-0.6118\u003c/td\u003e\n      \u003ctd\u003e-0.5282\u003c/td\u003e\n      \u003ctd\u003e-1.0730\u003c/td\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003e0.8654\u003c/td\u003e\n      \u003ctd\u003e-2.3015\u003c/td\u003e\n      \u003ctd\u003e1.7448\u003c/td\u003e\n      \u003ctd\u003e-0.7612\u003c/td\u003e\n      \u003ctd\u003e-5.9994\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003e0.3190\u003c/td\u003e\n      \u003ctd\u003e-0.2494\u003c/td\u003e\n      \u003ctd\u003e1.4621\u003c/td\u003e\n      \u003ctd\u003e-2.0601\u003c/td\u003e\n      \u003ctd\u003e-0.5910\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n \n\n\n\n\n```python\nfrom sklearn.decomposition import PCA, IncrementalPCA\n\ndef pca_feature(df, memory_issues=False,mem_iss_component=False,variance_or_components=0.80,drop_cols=None):\n\n  if memory_issues:\n    if not mem_iss_component:\n      raise ValueError(\"If you have memory issues, you have to preselect mem_iss_component\")\n    pca = IncrementalPCA(mem_iss_component)\n  else:\n    if variance_or_components\u003e1:\n      pca = PCA(n_components=variance_or_components) \n    else: # automted selection based on variance\n      pca = PCA(n_components=variance_or_components,svd_solver=\"full\") \n  X_pca = pca.fit_transform(df.drop(drop_cols,axis=1))\n  df = pd.concat((df[drop_cols],pd.DataFrame(X_pca, columns=[\"PCA_\"+str(i+1) for i in range(X_pca.shape[1])])),axis=1)\n  return df\n\ndf_out = pv.pca_feature(df,variance_or_components=0.80,drop_cols=[\"target\",\"a\"]); df_out\n\n```\n\n\n\n\n \n\u003ctable  class=\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style=\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003etarget\u003c/th\u003e\n      \u003cth\u003ea\u003c/th\u003e\n      \u003cth\u003ePCA_1\u003c/th\u003e\n      \u003cth\u003ePCA_2\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003e1.1227\u003c/td\u003e\n      \u003ctd\u003e1.6243\u003c/td\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirmai%2Fpandasvault","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirmai%2Fpandasvault","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirmai%2Fpandasvault/lists"}