GUIDE · PYTHON · PARQUET

How to load 1-minute NIFTY options Parquet in pandas

Download the free sample, open it in pandas (or DuckDB), filter by strike and expiry, and rebuild the chain — the same workflow as a paid pack. The sample has 13 columns; most older 1-minute option files use a second layout that also includes iv (step 3 shows how to normalise).

1. Get the free sample

Download https://optionsdata.shop/samples/NIFTY_OPT_1min_SAMPLE.zip (also linked from /sample). No email. Inside: nine option-chain Parquet files — one per trading day per expiry — for 2026-09-15 (a weekly expiry day), 2026-09-16 and 2026-09-17, plus a README.

The sample has 13 columns and no iv column. Most older 1-minute option files (NIFTY Jul 2023 – 14 Aug 2026) use a second layout that also includes an iv column taken as-is from the data feed, not independently verified. No file has Greeks or bid/ask.

2. Install readers

You need pandas plus a Parquet engine (pyarrow or fastparquet).

pip install pandas pyarrow
# optional: pip install duckdb

3. Read an options file

In the sample layout, right is "Call" or "Put"; expiry_date is a DD-MON-YYYY string; datetime is IST wall-clock. Older files use timestamp, strike, option_type (CE/PE), expiry (YYYY-MM-DD), oi and iv instead — the rename at the end maps them (both layouts on /free/schema).

import pandas as pd

opt = pd.read_parquet("NIFTY_OPT_1min_2026-09-15_exp2026-09-15.parquet")
print(opt.columns.tolist())
# ['close', 'datetime', 'exchange_code', 'expiry_date', 'high', 'low', 'open',
#  'open_interest', 'product_type', 'right', 'stock_code', 'strike_price', 'volume']
print(opt.head())

# older files use the second layout; map them to the sample names
opt = opt.rename(columns={"timestamp": "datetime", "strike": "strike_price",
                          "option_type": "right", "expiry": "expiry_date",
                          "oi": "open_interest"})
opt["right"] = opt["right"].replace({"CE": "Call", "PE": "Put"})

4. ATM straddle for one minute

Pick a minute, take the strike where call and put premiums are closest (a simple ATM proxy), and sum the two premiums.

ts = opt["datetime"].min()                      # 09:15 bar
bar = opt[opt["datetime"] == ts]
px = bar.pivot_table(index="strike_price", columns="right", values="close")
atm = (px["Call"] - px["Put"]).abs().idxmin()
print(atm, float(px.loc[atm, "Call"] + px.loc[atm, "Put"]))

5. Join spot (paid Complete packs)

The free zip is options-only. NIFTY Complete packs add spot and futures files (NIFTY_SPOT_1min_<date>.parquet, NIFTY_FUT_1min_<date>_exp<expiry>.parquet) that align with the options on time. Spot files from most of Jul 2023 – 14 Aug 2026 use timestamp (plus atm_strike, straddle, straddle_iv from the data feed); rename timestamp to datetime first.

spot = pd.read_parquet("NIFTY_SPOT_1min_2026-08-20.parquet")   # from a paid pack
merged = opt.merge(spot[["datetime", "close"]], on="datetime", suffixes=("", "_spot"))
print(merged.head())

6. DuckDB (fast scans on multi-year packs)

For multi-GB packs, query Parquet in place with DuckDB instead of loading everything into RAM. A multi-year pack mixes the two column layouts, so glob one layout's date range at a time (or normalise first).

import duckdb
con = duckdb.connect()
q = """
SELECT strike_price, "right", avg(close) AS avg_px, sum(volume) AS vol
FROM read_parquet('NIFTY_OPT_1min_*.parquet')
GROUP BY 1, 2
ORDER BY vol DESC
LIMIT 20
"""
print(con.execute(q).df())

FAQ

Does the free sample match paid pack columns exactly?

Not always. The sample has 13 columns; most older 1-minute option files (NIFTY Jul 2023 – 14 Aug 2026, SENSEX Nov 2023 – 14 Aug 2026) use a second layout that also includes an iv column taken as-is from the data feed, not independently verified. No file has Greeks or bid/ask. Both layouts are on /free/schema.

CSV or Parquet?

Files are Parquet. Any file converts to CSV in one line: pd.read_parquet(f).to_csv("out.csv", index=False).

1-second data too?

Yes for NIFTY and SENSEX options windows — see /data and /coverage for live spans. Same Parquet workflow.

Next

Validate columns on the free sample, then buy.

Free sample NIFTY options pack Full schema