{"id":17361,"date":"2026-02-09T14:09:40","date_gmt":"2026-02-09T08:39:40","guid":{"rendered":"https:\/\/www.youstable.com\/blog\/?p=17361"},"modified":"2026-02-09T14:09:42","modified_gmt":"2026-02-09T08:39:42","slug":"pandas-dataframe","status":"publish","type":"post","link":"https:\/\/www.youstable.com\/blog\/pandas-dataframe","title":{"rendered":"Pandas DataFrame Explained With Examples in 2026"},"content":{"rendered":"\n<p><strong>A Pandas DataFrame is <\/strong>a two dimensional, tabular data structure in Python with labeled rows and columns, designed for fast data cleaning, analysis, and transformation. Think of it as an in memory spreadsheet with powerful indexing, selection, and aggregation features. <\/p>\n\n\n\n<p>Below, you\u2019ll see Pandas DataFrame explained with examples that you can copy, run, and adapt. Pandas DataFrame is the core building block of data analysis in Python. It makes importing, cleaning, transforming, and summarizing data easy and efficient. <\/p>\n\n\n\n<p>In this guide, I\u2019ll explain what a DataFrame is, how to create it, and how to work with it backed by practical examples and best practices from real analytics and engineering projects.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"what-is-a-pandas-dataframe\">What is a Pandas DataFrame?<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1280\" height=\"720\" src=\"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2026\/01\/What-is-a-Pandas-DataFrame.jpg\" alt=\"Pandas DataFrame\" class=\"wp-image-17611\" srcset=\"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2026\/01\/What-is-a-Pandas-DataFrame.jpg 1280w, https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2026\/01\/What-is-a-Pandas-DataFrame-150x84.jpg 150w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/figure>\n\n\n\n<p><strong>A Pandas DataFrame is a 2D labeled table where:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Columns can hold<\/strong> different data types (int, float, string, datetime, categorical).<\/li>\n\n\n\n<li><strong>Rows and columns<\/strong> have labels (index and column names) for fast, human readable access.<\/li>\n\n\n\n<li><strong>Vectorized operations<\/strong> enable fast arithmetic and transformations across columns.<\/li>\n<\/ul>\n\n\n\n<p>DataFrames are built on top of Series <strong>(1D arrays)<\/strong> and integrate closely with NumPy for performance. Compared to plain Python lists or CSV handling, DataFrames offer built in tools for missing values, joins, group operations, and analytics.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"pandas-dataframe-vs-series-vs-numpy-array\">Pandas DataFrame vs Series vs NumPy Array<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Series:<\/strong> 1D labeled array (like a single column).<\/li>\n\n\n\n<li><strong>DataFrame:<\/strong> 2D labeled table of multiple Series aligned by index.<\/li>\n\n\n\n<li><strong>NumPy array:<\/strong> Fast, homogeneous n-dimensional array (no column labels or mixed types).<\/li>\n<\/ul>\n\n\n\n<p>Choose DataFrame for labeled, mixed type tabular data; NumPy arrays for pure numeric, same type data; Series for single columns or features.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"how-to-create-a-dataframe-with-examples\">How to Create a DataFrame (With Examples)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"1-from-python-dictionaries-or-lists\">1. From Python dictionaries or lists<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import pandas as pd\n\ndata = {\n    \"name\": &#91;\"Ava\", \"Ben\", \"Chad\"],\n    \"age\": &#91;29, 34, 27],\n    \"city\": &#91;\"Dallas\", \"Austin\", \"Houston\"]\n}\n\ndf = pd.DataFrame(data)\nprint(df)<\/code><\/pre>\n\n\n\n<p>This is the simplest way to build a small DataFrame for testing or demos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"2-from-csv-excel-json-or-sql\">2. From CSV, Excel, JSON, or SQL<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># CSV\ndf = pd.read_csv(\"sales.csv\")\n\n# Excel\ndf_xls = pd.read_excel(\"sales.xlsx\", sheet_name=\"Q1\")\n\n# JSON\ndf_json = pd.read_json(\"data.json\")\n\n# SQL (requires an engine, e.g., SQLite or PostgreSQL)\nfrom sqlalchemy import create_engine\nengine = create_engine(\"sqlite:\/\/\/app.db\")\ndf_sql = pd.read_sql(\"SELECT * FROM orders\", engine)<\/code><\/pre>\n\n\n\n<p>Use these readers in real projects, especially for larger datasets and production pipelines.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"3-from-numpy-arrays-or-series\">3. From NumPy arrays or Series<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import numpy as np\narr = np.array(&#91;&#91;1, 2], &#91;3, 4]])\ndf_np = pd.DataFrame(arr, columns=&#91;\"a\", \"b\"])\nprint(df_np)<\/code><\/pre>\n\n\n\n<p>When data starts numeric and unlabelled, add column names immediately for clarity and downstream compatibility.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"selecting-indexing-and-filtering-data\">Selecting, Indexing, and Filtering Data<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"loc-vs-iloc\">.loc vs .iloc<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Sample setup\ndf = pd.DataFrame({\n    \"name\": &#91;\"Ava\", \"Ben\", \"Chad\", \"Dana\"],\n    \"age\": &#91;29, 34, 27, 31],\n    \"score\": &#91;85, 92, 88, 79]\n}, index=&#91;\"u1\", \"u2\", \"u3\", \"u4\"])\n\n# Label-based selection with .loc\nprint(df.loc&#91;\"u2\", \"score\"])        # row label \"u2\", column \"score\"\nprint(df.loc&#91;\"u1\":\"u3\", &#91;\"name\",\"age\"]])  # slice by labels\n\n# Position-based selection with .iloc\nprint(df.iloc&#91;1, 2])                # second row, third column (0-based)\nprint(df.iloc&#91;0:2, 0:2])            # top-left 2x2 block<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"boolean-filtering-and-query\">Boolean filtering and query<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Filter rows\nadults = df&#91;df&#91;\"age\"] &gt;= 30]\nhigh_scorers = df&#91;(df&#91;\"score\"] &gt;= 90) &amp; (df&#91;\"age\"] &lt; 35)]\n\n# Using query (readable for complex filters)\ntop = df.query(\"score &gt;= 90 and age &lt; 35\")<\/code><\/pre>\n\n\n\n<p>Prefer vectorized boolean masks or query strings for speed and readability instead of loops.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"common-dataframe-operations\">Common DataFrame Operations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"add-rename-and-drop-columns\">Add, rename, and drop columns<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Create or transform columns\ndf&#91;\"age_group\"] = pd.cut(df&#91;\"age\"], bins=&#91;0, 29, 100], labels=&#91;\"Young\", \"Adult\"])\ndf = df.rename(columns={\"score\": \"exam_score\"})\ndf = df.drop(columns=&#91;\"age_group\"])<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"sorting-and-ranking\">Sorting and ranking<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>df_sorted = df.sort_values(by=&#91;\"exam_score\", \"age\"], ascending=&#91;False, True])\ndf&#91;\"rank\"] = df&#91;\"exam_score\"].rank(ascending=False, method=\"dense\")<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"groupby-and-aggregation\">GroupBy and aggregation<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sales = pd.DataFrame({\n    \"region\": &#91;\"US\",\"US\",\"EU\",\"EU\",\"APAC\"],\n    \"rep\": &#91;\"A\",\"B\",\"C\",\"D\",\"E\"],\n    \"revenue\": &#91;100, 130, 90, 120, 150]\n})\n\nsummary = sales.groupby(\"region\")&#91;\"revenue\"].agg(&#91;\"count\",\"sum\",\"mean\",\"max\"])\nprint(summary)<\/code><\/pre>\n\n\n\n<p>GroupBy splits data into groups, applies functions, and combines results. It\u2019s the workhorse for reporting and BI style summaries.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"apply-vs-vectorization\">Apply vs vectorization<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Prefer vectorized operations\ndf&#91;\"double_score\"] = df&#91;\"exam_score\"] * 2\n\n# If you must use apply, keep it simple (it\u2019s slower)\ndf&#91;\"pass_fail\"] = df&#91;\"exam_score\"].apply(lambda x: \"Pass\" if x &gt;= 80 else \"Fail\")<\/code><\/pre>\n\n\n\n<p>Vectorized operations leverage C-optimized routines and are significantly faster than row wise apply.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"handling-missing-data-and-types\">Handling Missing Data and Types<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"detect-fill-or-drop-missing-values\">Detect, fill, or drop missing values<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>df.isna().sum()                      # count of NaNs per column\ndf_filled = df.fillna({\"exam_score\": 0})\ndf_dropped = df.dropna(subset=&#91;\"exam_score\"])<\/code><\/pre>\n\n\n\n<p>Use domain specific strategies: forward fill time series, fill with medians for skewed numeric data, or drop when appropriate.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"fix-dtypes-for-speed-and-memory\">Fix dtypes for speed and memory<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Convert strings that look like numbers\ndf&#91;\"exam_score\"] = pd.to_numeric(df&#91;\"exam_score\"], errors=\"coerce\")\n\n# Categorical for repeated strings\ndf&#91;\"name\"] = df&#91;\"name\"].astype(\"category\")\n\n# Parse datetimes\ndf&#91;\"date\"] = pd.to_datetime(df&#91;\"date\"], errors=\"coerce\")<\/code><\/pre>\n\n\n\n<p>Proper dtypes (especially categorical and datetime) reduce memory and unlock faster filtering and grouping.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"merging-joining-and-concatenating\">Merging, Joining, and Concatenating<\/h3>\n\n\n\n<p>Combine multiple DataFrames just like SQL joins or stacked tables.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>customers = pd.DataFrame({\n    \"cust_id\": &#91;1,2,3],\n    \"name\": &#91;\"Ava\",\"Ben\",\"Chad\"]\n})\norders = pd.DataFrame({\n    \"order_id\": &#91;101,102,103],\n    \"cust_id\": &#91;1,1,3],\n    \"amount\": &#91;39.5, 12.0, 55.0]\n})\n\n# SQL-style inner join on a key\nmerged = pd.merge(orders, customers, on=\"cust_id\", how=\"inner\")\n\n# Concatenate rows (stack)\nstacked = pd.concat(&#91;orders, orders], ignore_index=True)\n\n# Join by index\ncustomers_i = customers.set_index(\"cust_id\")\norders_i = orders.set_index(\"cust_id\")\njoined = customers_i.join(orders_i, how=\"left\")<\/code><\/pre>\n\n\n\n<p>Choose inner for intersection, left to keep all from the left table, and outer for full union. Always validate key uniqueness to avoid duplication.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"i-o-and-serialization-csv-vs-parquet-vs-feather\">I\/O and Serialization: CSV vs Parquet vs Feather<\/h2>\n\n\n\n<p>CSV is human readable but large and slow to parse. Parquet and Feather are binary columnar formats that load faster and use less disk.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># CSV\ndf.to_csv(\"data.csv\", index=False)\n\n# Parquet (requires pyarrow or fastparquet)\ndf.to_parquet(\"data.parquet\", index=False)\n\n# Feather (fast for Python-R interchange)\ndf.to_feather(\"data.feather\")<\/code><\/pre>\n\n\n\n<p>For analytics at scale, prefer Parquet or Feather to reduce I\/O overhead and speed up pipelines.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"performance-tips-for-large-dataframes\">Performance Tips for Large DataFrames<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Read in chunks:<\/strong> use read_csv with chunksize for huge files.<\/li>\n\n\n\n<li><strong>Downcast numerics:<\/strong> convert float64\/int64 to float32\/int32 when safe.<\/li>\n\n\n\n<li>Use categorical dtype for repeated strings (e.g., country codes, product IDs).<\/li>\n\n\n\n<li>Prefer vectorized operations and built in aggregations over loops.<\/li>\n\n\n\n<li>Filter early, select only necessary columns (usecols=&#8230;).<\/li>\n\n\n\n<li>Cache intermediate results to Parquet for faster re-runs.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># Example: chunked CSV processing\nimport pandas as pd\n\ntotal = 0\nfor chunk in pd.read_csv(\"events.csv\", usecols=&#91;\"user_id\",\"amount\"], chunksize=500_000):\n    chunk&#91;\"amount\"] = pd.to_numeric(chunk&#91;\"amount\"], errors=\"coerce\")\n    total += chunk&#91;\"amount\"].sum(skipna=True)\nprint(total)<\/code><\/pre>\n\n\n\n<p><strong>Working with millions of rows benefits from<\/strong> strong compute and I\/O. If you run Jupyter, Airflow, or ETL scripts in the cloud, a scalable VPS with NVMe storage helps. At <strong><a href=\"https:\/\/www.youstable.com\/\">YouStable<\/a><\/strong>, we provision SSD\/NVMe VPS and managed cloud instances suitable for data workflows, so your Pandas jobs finish faster and more reliably.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"real-world-examples-you-can-reuse\">Real World Examples You Can Reuse<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"web-log-analytics-filtering-and-grouping\">Web log analytics (filtering and grouping)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import pandas as pd\n\nlogs = pd.read_csv(\"access.log.csv\", usecols=&#91;\"ip\",\"status\",\"bytes\",\"ts\"])\n# Parse timestamp and filter errors\nlogs&#91;\"ts\"] = pd.to_datetime(logs&#91;\"ts\"])\nerrors = logs&#91;logs&#91;\"status\"].isin(&#91;500, 502, 503, 504])]\n\n# Error rate by minute\nrate = (errors\n        .groupby(pd.Grouper(key=\"ts\", freq=\"1min\"))\n        .size()\n        .rename(\"errors_per_min\"))\nprint(rate.tail())<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"sales-analytics-joins-and-aggregation\">Sales analytics (joins and aggregation)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>orders = pd.read_csv(\"orders.csv\")           # order_id, cust_id, amount, date\ncustomers = pd.read_csv(\"customers.csv\")     # cust_id, segment\n\ndf = pd.merge(orders, customers, on=\"cust_id\", how=\"left\")\ndf&#91;\"date\"] = pd.to_datetime(df&#91;\"date\"])\n\n# Revenue by segment and month\nmonthly = (df\n    .groupby(&#91;pd.Grouper(key=\"date\", freq=\"MS\"), \"segment\"])&#91;\"amount\"]\n    .sum()\n    .reset_index()\n    .sort_values(&#91;\"date\", \"segment\"]))\nprint(monthly.head())<\/code><\/pre>\n\n\n\n<p>These patterns appear in business dashboards, anomaly detection, and capacity planning across engineering teams.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"best-practices-checklist\">Best Practices Checklist<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Name columns clearly and consistently (snake_case recommended).<\/li>\n\n\n\n<li>Set index when it conveys identity or time (e.g., set a datetime index for time series).<\/li>\n\n\n\n<li><strong>Validate joins:<\/strong> check key uniqueness and row counts after merges.<\/li>\n\n\n\n<li>Use Parquet for large intermediate datasets, CSV for interchange with humans.<\/li>\n\n\n\n<li>Convert dtypes early to avoid surprises and reduce memory.<\/li>\n\n\n\n<li>Favor vectorization and built in methods; avoid row wise apply in tight loops.<\/li>\n\n\n\n<li>Write reproducible code: pin versions and seed randomness when needed.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"faqs\">FAQs<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1768369511888\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"what-is-a-pandas-dataframe-used-for\">What is a Pandas DataFrame used for?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>A Pandas DataFrame is used for loading, cleaning, transforming, analyzing, and exporting tabular data. It supports fast filtering, joins, aggregations, time series resampling, and feature engineering for machine learning pipelines.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1768369520749\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-create-a-dataframe-in-pandas\">How do I create a DataFrame in Pandas?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>You can create one from dictionaries\/lists (pd.DataFrame), files like CSV or Excel (pd.read_csv, pd.read_excel), JSON (pd.read_json), or SQL (pd.read_sql). For numeric data, convert from NumPy arrays and add column names for readability.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1768369527226\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"whats-the-difference-between-loc-and-iloc\">What\u2019s the difference between .loc and .iloc?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>.loc selects by label (index\/column names), while .iloc selects by integer position. Use .loc when you know the labels, and .iloc for positional slicing and numeric offsets.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1768369534645\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-do-i-handle-missing-values-in-a-dataframe\">How do I handle missing values in a DataFrame?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Use isna to detect, fillna to impute (with mean\/median\/mode or domain specific values), and dropna to remove rows\/columns. For time series, forward fill or back fill often makes sense, but validate with your domain rules.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1768369639517\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \" class=\"rank-math-question \" id=\"how-can-i-speed-up-pandas-on-large-datasets\">How can I speed up Pandas on large datasets?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Read in chunks, downcast numeric types, use categorical dtypes, filter early, and switch to Parquet. For larger than memory workloads, consider Dask or Polars. Running on NVMe backed VPS or cloud nodes (like those from YouStable) can also reduce I\/O bottlenecks and speed up jobs.<\/p>\n<p>With these foundations and examples, you can confidently use Pandas DataFrames for data wrangling, analytics, and production ETL. Keep your code clear, your dtypes correct, and your storage formats optimized for performance.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>A Pandas DataFrame is a two dimensional, tabular data structure in Python with labeled rows and columns, designed for fast [&hellip;]<\/p>\n","protected":false},"author":21,"featured_media":18519,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[350],"tags":[],"class_list":["post-17361","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knowledgebase"],"acf":[],"featured_image_src":"https:\/\/www.youstable.com\/blog\/wp-content\/uploads\/2026\/01\/Pandas-DataFrame.jpg","author_info":{"display_name":"Sanjeet Chauhan","author_link":"https:\/\/www.youstable.com\/blog\/author\/sanjeet"},"_links":{"self":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/17361","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/comments?post=17361"}],"version-history":[{"count":10,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/17361\/revisions"}],"predecessor-version":[{"id":18521,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/posts\/17361\/revisions\/18521"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media\/18519"}],"wp:attachment":[{"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/media?parent=17361"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/categories?post=17361"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.youstable.com\/blog\/wp-json\/wp\/v2\/tags?post=17361"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}