pandas Cheatsheet
Reading and Writing
Use this pandas reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.
Reading CSV
import pandas as pd df = pd.read_csv("data.csv") # Key parameters df = pd.read_csv( "data.csv", sep=",", # delimiter (use sep="\t" for TSV) header=0, # row number for column names (None = no header) names=["a", "b"], # supply column names manually index_col="id", # column to use as row index usecols=["a", "b"], # only read these columns dtype={"age": int}, # per-column dtype parse_dates=["date"],# parse these columns as datetime nrows=1000, # read only first N rows skiprows=2, # skip N rows from top (or list of row numbers) skipfooter=1, # skip N rows at end (engine="python" required) na_values=["NA", "?"],# extra strings to treat as NaN keep_default_na=True, encoding="utf-8", chunksize=10_000, # returns TextFileReader iterator engine="c", # "c" (fast) or "python" (flexible) thousands=",", # thousands separator decimal=".", comment="#", # ignore lines starting with this char quotechar='"', low_memory=False, # disable dtype guessing per chunk )
Reading in Chunks
chunks = pd.read_csv("big.csv", chunksize=10_000) df = pd.concat(chunks, ignore_index=True) # Process without loading all into memory for chunk in pd.read_csv("big.csv", chunksize=10_000): process(chunk)
Writing CSV
df.to_csv("out.csv") df.to_csv( "out.csv", index=False, # don't write row index columns=["a", "b"], # subset of columns sep=",", na_rep="", # string for NaN float_format="%.2f", date_format="%Y-%m-%d", encoding="utf-8", header=True, mode="a", # append mode lineterminator="\n", )
Excel
# Reading df = pd.read_excel("data.xlsx") df = pd.read_excel("data.xlsx", sheet_name="Sheet1") df = pd.read_excel("data.xlsx", sheet_name=0) # by position all_sheets = pd.read_excel("data.xlsx", sheet_name=None) # dict of DataFrames # Writing (requires openpyxl) df.to_excel("out.xlsx", index=False) df.to_excel("out.xlsx", sheet_name="Results", index=False) # Multiple sheets with pd.ExcelWriter("out.xlsx") as writer: df1.to_excel(writer, sheet_name="Sheet1", index=False) df2.to_excel(writer, sheet_name="Sheet2", index=False) # Append to existing file with pd.ExcelWriter("out.xlsx", mode="a", engine="openpyxl") as writer: df.to_excel(writer, sheet_name="New")
JSON
# Reading df = pd.read_json("data.json") df = pd.read_json("data.json", orient="records") # list of row dicts df = pd.read_json("data.json", orient="columns") # {col: {idx: val}} df = pd.read_json("data.json", orient="index") df = pd.read_json("data.json", orient="split") # {index, columns, data} df = pd.read_json("data.json", lines=True) # newline-delimited JSON # Writing df.to_json("out.json") df.to_json("out.json", orient="records", lines=True) df.to_json("out.json", orient="records", indent=2) json_str = df.to_json(orient="records")
Parquet
# Requires pyarrow or fastparquet df = pd.read_parquet("data.parquet") df = pd.read_parquet("data.parquet", columns=["a", "b"]) df = pd.read_parquet("data/", engine="pyarrow") # directory of parts df.to_parquet("out.parquet", index=False) df.to_parquet("out.parquet", engine="pyarrow", compression="snappy")
Feather / Arrow
# Fast binary; use for in-process hand-off df = pd.read_feather("data.feather") df.to_feather("out.feather")
SQL
import sqlalchemy as sa engine = sa.create_engine("postgresql://user:pw@host/db") # Read entire table df = pd.read_sql_table("orders", con=engine) # Read with query df = pd.read_sql("SELECT * FROM orders WHERE amount > 100", con=engine) df = pd.read_sql_query("SELECT id, name FROM users", con=engine) # Write df.to_sql("orders", con=engine, if_exists="append", index=False) # if_exists: "fail" | "replace" | "append" # Chunked read for chunk in pd.read_sql("SELECT * FROM big_table", con=engine, chunksize=5000): process(chunk)
Clipboard and Other Formats
# Clipboard (great for quick ad-hoc work) df = pd.read_clipboard() df.to_clipboard(index=False) # HTML (reads first <table> by default) dfs = pd.read_html("https://example.com/table") # returns list df = dfs[0] # Fixed-width format df = pd.read_fwf("data.fwf", colspecs=[(0, 10), (10, 20)]) # HDF5 (requires tables/pytables) df.to_hdf("data.h5", key="df", mode="w") df = pd.read_hdf("data.h5", key="df") # Pickle df.to_pickle("data.pkl") df = pd.read_pickle("data.pkl") # Stata / SAS / SPSS df = pd.read_stata("data.dta") df = pd.read_sas("data.sas7bdat") df = pd.read_spss("data.sav")
URLs and Compression
# Read directly from URL df = pd.read_csv("https://example.com/data.csv") # Compressed files — auto-detected by extension df = pd.read_csv("data.csv.gz") df = pd.read_csv("data.csv.zip") df = pd.read_csv("data.csv.bz2") df = pd.read_csv("data.csv.xz") # Write compressed df.to_csv("out.csv.gz", index=False, compression="gzip") df.to_parquet("out.parquet", compression="zstd")
String / Buffer I/O
import io # Parse CSV from a string csv_string = "a,b\n1,2\n3,4" df = pd.read_csv(io.StringIO(csv_string)) # Write CSV to a string buffer buf = io.StringIO() df.to_csv(buf, index=False) csv_str = buf.getvalue()