{"id":208,"library":"pandas","title":"pandas","description":"The standard Python DataFrame library for data analysis. Current version is 3.0.1 (Feb 2026). pandas 3.0 is a major release with two ecosystem-wide breaking changes: Copy-on-Write (CoW) is now the only mode, and string columns now default to str dtype instead of object. Requires Python >=3.11.","status":"active","version":"3.0.1","language":"python","source_language":"en","source_url":"https://pandas.pydata.org/docs/whatsnew/v3.0.0.html","tags":["dataframe","data-analysis","numpy","csv","excel","time-series"],"install":[{"cmd":"pip install pandas","lang":"bash","label":"Core"},{"cmd":"pip install pandas[performance]","lang":"bash","label":"With performance extras (bottleneck, numexpr, numba)"},{"cmd":"pip install pandas pyarrow","lang":"bash","label":"Recommended: with PyArrow for faster string dtype"},{"cmd":"pip install pandas[all]","lang":"bash","label":"All optional dependencies"}],"dependencies":[{"reason":"Required. Installed automatically.","package":"numpy>=1.23.2","optional":false},{"reason":"Required. Installed automatically.","package":"python-dateutil>=2.8.2","optional":false},{"reason":"Strongly recommended. Backs the new str dtype for better performance. Not required but highly beneficial.","package":"pyarrow>=10.0.1","optional":true},{"reason":"Required for read_excel() and to_excel() with .xlsx files.","package":"openpyxl","optional":true}],"imports":[{"note":"Copy-on-Write is now mandatory in 3.0. Chained assignment (df['col'][mask] = val) no longer modifies the DataFrame — it silently does nothing.","wrong":"df['b'][df['a'] > 1] = 'z'  # chained assignment — silently fails in pandas 3.0 (CoW)","symbol":"pandas","correct":"import pandas as pd\n\ndf = pd.DataFrame({'a': [1, 2], 'b': ['x', 'y']})\n# Modify using loc in one step\ndf.loc[df['a'] > 1, 'b'] = 'z'"},{"note":"String columns now infer to str dtype instead of numpy object. Code checking dtype == object or dtype == 'O' for string detection will silently miss string columns.","wrong":"if df['col'].dtype == object:  # no longer true for string columns in pandas 3.0\n    ...","symbol":"string dtype","correct":"ser = pd.Series(['a', 'b'])\nser.dtype  # dtype('str') in pandas 3.0\n\n# Check for string dtype in 3.0-compatible way:\nif pd.api.types.is_string_dtype(ser):\n    ..."}],"quickstart":{"code":"import pandas as pd\nimport numpy as np\n\n# Create DataFrame\ndf = pd.DataFrame({\n    'name': ['Alice', 'Bob', 'Charlie'],\n    'score': [85, 92, 78],\n    'dept': ['eng', 'eng', 'mkt']\n})\n\n# Correct modification in pandas 3.0 (CoW)\ndf.loc[df['score'] > 80, 'grade'] = 'pass'\n\n# Or use assign() for derived columns (returns new DataFrame)\ndf = df.assign(grade=lambda x: np.where(x['score'] > 80, 'pass', 'fail'))\n\n# Check dtypes — strings are now 'str', not 'object'\nprint(df.dtypes)\n# name     str\n# score    int64\n# dept     str","lang":"python","description":"pandas 3.0 patterns. Use loc for in-place modification. Strings are str dtype not object."},"warnings":[{"fix":"Use df.loc[mask, 'col'] = value for conditional assignment. Use df = df.assign(col=...) for derived columns. Remove all defensive .copy() calls added to silence old SettingWithCopyWarning.","message":"Copy-on-Write (CoW) is now the only mode in pandas 3.0. Chained assignment df['col'][mask] = value silently does nothing — no error, no warning, no modification. This is the most common invisible bug when upgrading.","severity":"breaking","affected_versions":">= 3.0"},{"fix":"Replace dtype == object checks with pd.api.types.is_string_dtype(col) or dtype == 'str'. For library code: handle both 'object' and 'str' dtypes during transition.","message":"String columns now default to str dtype instead of numpy object dtype. Code checking dtype == object or dtype == 'O' to detect string columns will fail silently in pandas 3.0.","severity":"breaking","affected_versions":">= 3.0"},{"fix":"Pin pandas<3.0 for Python <=3.10 environments. Upgrade Python to 3.11+ to use pandas 3.0.","message":"Python 3.10 and below dropped. pandas 3.0 requires Python >=3.11.","severity":"breaking","affected_versions":">= 3.0"},{"fix":"Explicitly pass unit='ns' where nanosecond precision is required: pd.to_datetime(arr, unit='ns').","message":"Datetime default resolution changed from nanoseconds to microseconds (or input resolution). pd.Timestamp arithmetic and comparisons with nanosecond precision may produce different results.","severity":"breaking","affected_versions":">= 3.0"},{"fix":"Pass observed=False explicitly to restore old behavior if unobserved categories are needed.","message":"DataFrame.groupby() observed parameter default changed to True for Categorical columns. Previously unobserved categories were included by default, causing silent behavior changes on groupby aggregations.","severity":"breaking","affected_versions":">= 2.2"},{"fix":"Remove pd.options.mode.copy_on_write = True/False from your code — CoW is always on.","message":"mode.copy_on_write option deprecated — setting it has no effect in pandas 3.0 and will be removed in 4.0.","severity":"deprecated","affected_versions":">= 3.0"},{"fix":"pip install pyarrow alongside pandas. Verified by: pd.Series(['a']).dtype shows 'str' regardless, but performance differs significantly.","message":"pyarrow is not required but strongly recommended for pandas 3.0. Without pyarrow, the new str dtype falls back to numpy object-backed storage, losing most performance benefits.","severity":"gotcha","affected_versions":">= 3.0"},{"fix":"Test your full dependency stack against pandas 3.0 before upgrading. Use pandas 2.3.x as a stepping stone to surface deprecation warnings first.","message":"Many third-party libraries (scikit-learn, seaborn, statsmodels, SHAP) had pandas 3.0 compatibility issues at release. Check library versions when upgrading.","severity":"gotcha","affected_versions":">= 3.0"},{"fix":"Ensure PostgreSQL development headers are installed, or install the `psycopg2-binary` package instead of `psycopg2` (e.g., `pip install psycopg2-binary`). For Debian/Ubuntu, `apt-get install libpq-dev`.","message":"Building `psycopg2` from source fails due to missing PostgreSQL development headers and libraries (`pg_config`). This is a common issue in minimal environments.","severity":"gotcha","affected_versions":"N/A (dependency issue, not pandas version specific)"},{"fix":"Ensure that essential build tools are installed in your environment before installing `pandas[performance]`. For Alpine Linux, use `apk add build-base cmake`.","message":"Installing `pandas[performance]` (which requires numba and llvmlite) may fail in minimal environments (e.g., Alpine Linux) due to missing system build tools like `gcc` and `cmake`, which are necessary for compiling these dependencies.","severity":"gotcha","affected_versions":">= 3.0"}],"env_vars":null,"last_verified":"2026-05-12T10:17:34.826Z","next_check":"2026-06-25T00:00:00.000Z","problems":[{"fix":"Install pandas using pip: `pip install pandas` (or `conda install pandas` if using Anaconda).","cause":"The pandas library is not installed in the Python environment where the code is being executed.","error":"ModuleNotFoundError: No module named 'pandas'"},{"fix":"Verify the exact column names using `df.columns` and correct any typos or casing issues. It's often helpful to strip whitespace from column names: `df.columns = df.columns.str.strip()`.","cause":"Attempting to access a DataFrame column or index label that does not exist in the DataFrame, often due to typos, incorrect casing, or hidden whitespace in column names.","error":"KeyError: 'some_column_name'"},{"fix":"Replace `df.append()` with `pd.concat()` for combining DataFrames or Series. Example: `new_df = pd.concat([df1, df2])`.","cause":"The `append()` method for DataFrames and Series was deprecated in pandas 1.4.0 and completely removed in pandas 2.0 and later versions.","error":"AttributeError: 'DataFrame' object has no attribute 'append'"},{"fix":"Use `pd.DataFrame()` with a capital 'D' for DataFrame. Example: `df = pd.DataFrame({'col1': [1, 2]})`.","cause":"Incorrect capitalization when trying to create a DataFrame; the class name for DataFrame must start with a capital 'D'.","error":"AttributeError: module 'pandas' has no attribute 'dataframe'"},{"fix":"Use `.loc` for a single-step, explicit assignment to ensure modification of the original DataFrame. Example: `df.loc[df['column_a'] > 5, 'column_b'] = new_value`.","cause":"In pandas 3.0, Copy-on-Write (CoW) is enabled by default, making chained assignments (e.g., `df[condition]['column'] = value`) reliably operate on a temporary copy, not the original DataFrame. This error prevents silent, incorrect modifications that previously might have only issued a `SettingWithCopyWarning`.","error":"ChainedAssignmentError: A value is trying to be set on a copy of a slice from a DataFrame."}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.78,"mem_mb":27.8,"disk_size":"164.6M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.99,"mem_mb":31.1,"disk_size":"334.2M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"performance","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.56,"mem_mb":27.8,"disk_size":"157M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.71,"mem_mb":31.1,"disk_size":"304M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"performance","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.58,"mem_mb":28.4,"disk_size":"348M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.09,"mem_mb":32.2,"disk_size":"177.1M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.4,"mem_mb":35.6,"disk_size":"348.9M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"performance","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.92,"mem_mb":32.2,"disk_size":"169M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.15,"mem_mb":35.6,"disk_size":"318M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"performance","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.94,"mem_mb":32.6,"disk_size":"368M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.93,"mem_mb":31.4,"disk_size":"162.3M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.2,"mem_mb":34.8,"disk_size":"333.9M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"performance","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.95,"mem_mb":31.4,"disk_size":"154M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.24,"mem_mb":34.8,"disk_size":"303M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"performance","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.98,"mem_mb":31.8,"disk_size":"352M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.9,"mem_mb":31.4,"disk_size":"161.2M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.15,"mem_mb":34.8,"disk_size":"332.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"performance","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.93,"mem_mb":31.4,"disk_size":"153M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.17,"mem_mb":34.8,"disk_size":"302M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"performance","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.94,"mem_mb":31.8,"disk_size":"351M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.75,"mem_mb":28.4,"disk_size":"172.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.92,"mem_mb":31.5,"disk_size":"328.5M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"performance","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.67,"mem_mb":28.4,"disk_size":"167M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.86,"mem_mb":31.5,"disk_size":"306M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"all","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"performance","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.69,"mem_mb":29,"disk_size":"326M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}