{"id":4544,"library":"frictionless","title":"Frictionless Data","description":"Frictionless is a data management framework for Python that provides functionality to describe, extract, validate, and transform tabular data (DEVT Framework). It supports a great deal of data sources and formats, as well as provides popular platform integrations. The framework is powered by the lightweight yet comprehensive Frictionless Standards. The current version is 5.18.1. The project has an active development and release cadence, with version 2.0 of the underlying Data Package standard recently released in June 2024, and significant updates to the Python library.","status":"active","version":"5.18.1","language":"en","source_language":"en","source_url":"https://github.com/frictionlessdata/frictionless-py","tags":["data validation","data management","tabular data","data quality","metadata","data package"],"install":[{"cmd":"pip install frictionless","lang":"bash","label":"Core library"},{"cmd":"pip install frictionless[sql]","lang":"bash","label":"For SQL database support"},{"cmd":"pip install frictionless[pandas]","lang":"bash","label":"For Pandas DataFrame support"}],"dependencies":[{"reason":"Used for GitHub integration functionalities (e.g., reading/publishing packages to GitHub repositories).","package":"PyGithub","optional":true},{"reason":"Required for SQL database connectivity. Installed via `frictionless[sql]`.","package":"SQLAlchemy","optional":true},{"reason":"Required for Pandas DataFrame integration. Installed via `frictionless[pandas]`.","package":"pandas","optional":true}],"imports":[{"symbol":"describe","correct":"from frictionless import describe"},{"symbol":"extract","correct":"from frictionless import extract"},{"symbol":"validate","correct":"from frictionless import validate"},{"note":"Top-level functions and classes are directly exposed under the `frictionless` namespace for ease of use.","wrong":"import frictionless.package","symbol":"Package","correct":"from frictionless import Package"}],"quickstart":{"code":"import os\nfrom frictionless import describe, extract\n\n# Create a dummy CSV file for demonstration\ncsv_content = \"\"\"id,name,value\n1,apple,100\n2,banana,200\n3,orange,150\n\"\"\"\nfile_path = \"data.csv\"\nwith open(file_path, \"w\") as f:\n    f.write(csv_content)\n\n# Describe the data to infer metadata (Table Schema)\nprint(\"--- Inferred Schema ---\")\nreport = describe(file_path)\nprint(report.to_json(indent=2))\n\n# Extract data as rows from the file\nprint(\"\\n--- Extracted Data ---\")\nrows = extract(file_path)\nfor row in rows:\n    print(row)\n\n# Clean up the dummy file\nos.remove(file_path)\n","lang":"python","description":"This quickstart demonstrates how to use `frictionless` to infer metadata (schema) from a CSV file and then extract its data as Python rows. It first creates a temporary CSV file, then uses `describe` to automatically generate a schema, and `extract` to read the data."},"warnings":[{"fix":"Review the official Frictionless v5 migration guide and update your code to reflect the new API where necessary.","message":"Frictionless Framework v5, released in December 2022, introduced several low-level breaking changes compared to v4. Users migrating from v4 or earlier should consult the official v5 announcement and migration guide for a smooth transition.","severity":"breaking","affected_versions":"5.x.x (from 4.x.x)"},{"fix":"Install the necessary plugins using `pip install frictionless[plugin_name]` as indicated by the error message or documentation.","message":"Support for certain data formats or schemes (e.g., SQL databases, Pandas DataFrames, HTML, Parquet) requires installing additional plugins (e.g., `pip install frictionless[sql]`). Attempting to use these features without the corresponding plugin will result in an error message with installation instructions.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Always refer to the specific interface's documentation for correct argument naming. For Python, use `snake_case`. For JSON/dictionaries, use `camelCase`. For CLI, use `--dashed-arguments`.","message":"Argument naming conventions differ across Frictionless interfaces: `snake_case` for Python arguments, `camelCase` for dictionary/JSON objects, and `dashes-case` for command-line interface arguments. Be mindful of these differences when moving between interfaces.","severity":"gotcha","affected_versions":"All versions"},{"fix":"Familiarize yourself with the Data Package v2 specification, especially for defining custom data packages. Ensure your data package descriptors conform to the latest standard for optimal compatibility.","message":"The underlying Frictionless Data Package standard was updated to version 2.0 in June 2024. While `frictionless-py` aims for backward compatibility, new features or stricter adherence to the v2 spec might subtly change how data packages are processed or validated compared to older versions.","severity":"gotcha","affected_versions":"5.x.x (especially after June 2024)"}],"env_vars":null,"last_verified":"2026-04-12T00:00:00.000Z","next_check":"2026-07-11T00:00:00.000Z"}