Data loading (CSV, JSON, parquet)
1.4.7· AI-ML › Python & Scientific Computing
Ye formats kya hain?

Har format ko kaise load karein
CSV loading — first principles se
CSV row-oriented kyun hai:
Jab tum Alice,25,92.5 likhte ho, computer left-to-right padhta hai, ek time mein ek row. Har row independent hoti hai. "All ages" paane ke liye, parser ko har row scan karni padti hai.
Key parameters WHY:
dtype: Pre-specifying types Pandas ki inference skip karta hai (jo ek sample padhta hai, guess karta hai, phir dobara padhta hai)—data ka ek full pass bachata haiparse_dates: "2023-01-01" jaise strings strings hi rahenge jab tak parse na ho—comparisons fail ho jaate hain, sorting toot jaati haichunksize: DataFrame nahi, iterator return karta hai—RAM se bade datasets process karne deta hai
JSON loading — hierarchical access
JSON alag kyun hai:
JSON nest kar sakta hai: {"user": {"name": "Alice", "prefs": {"theme": "dark"}}. Ye flat table nahi hai. Pandas ko ya toh flatten karna padega ya structure preserve karna padega.
Orient options WHY:
orient='records': Har JSON object → ek row (objects ke arrays ke liye default)orient='index': Keys row labels hain, values row data hainlines=True: Har line ek alag JSON object hai (JSONL format—streaming friendly, append karna aasaan)
Parquet loading — columnar efficiency
Parquet columnar kyun hai:
Traditional row format: [Alice|25|92.5][Bob|30|87.3]—"all ages" padhne ka matlab hai full rows parse karna.
Columnar: [names: Alice,Bob][ages: 25,30][scores: 92.5,87.3]—"all ages" padhne ke liye sirf ages block touch karna padta hai.
Compression benefit: Column data homogeneous hota hai (saare ints, saare floats)—mixed-type rows se better compress hota hai.
Filters WHY:
filters=[('age', '>', 25)]: Parquet har row group ke liye min/max stats store karta hai—data padhne ke bina poore row groups skip kar sakta hai (predicate pushdown)- CSV/JSON se filtered data padhna: poori file padhni padti hai, phir memory mein filter karo
Format comparison — kab kya use karein
| Format | Read Speed | Write Speed | Size | Nested Data | Type Safety | Use Case |
|---|---|---|---|---|---|---|
| CSV | Slow | Fast | Large | No | No (infer) | Interchange, human-readable |
| JSON | Slow | Medium | Largest | Yes | Partial | APIs, hierarchical configs |
| Parquet | Fast | Slow | Smallest | Partial | Yes | Analytics, archival, ML pipelines |
Size differences ka derivation (example: 1M rows, 10 columns):
CSV:
- Har value text ke roop mein: "25" = 2 bytes + delimiter
- 1M × 10 × 3 bytes avg ≈ 30MB uncompressed
JSON:
- Har row mein keys include hoti hain: {"age": 25} vs 25
- Overhead ≈ 2-3× CSV
- 1M × 10 × 9 bytes ≈ 90MB uncompressed
Parquet:
- Columnar compression: RLE, dictionary encoding, bit-packing
- Typical: CSV se 5-10× chhota
- Same data ≈ 3-6MB
Data likhna
Performance tips — format internals se derived
- CSV:
dtypeparameter use karo—inference do baar scan karta hai, explicit types ek baar scan karte hain - JSON: Streaming ke liye JSONL prefer karo (lines=True)—poora array load kiye bina processing allow karta hai
- Parquet:
columnsparameter hamesha use karo—columnar format ise almost free banata hai - Large files: CSV chunk karo, Parquet row groups use karo, ya parallel loading ke liye Dask/Polars par switch karo
- Repeated access: CSV → Parquet ek baar convert karo, subsequent reads par 10-50× bachao
CSV dtype speedup ka derivation:
Without dtype:
1. 1000 sample rows padho → types infer karo (string? int? float?)
2. Start par seek karo
3. Saari rows padho, inferred types ke saath parse karo
Total: 1 + N passes
With dtype={'age': int}:
1. Saari rows padho, known types ke saath parse karo
Total: N passes
Speedup = (1 + N) / N → large N ke liye ~2× (ek kam full read)
Recall Feynman explanation
Socho tum ek naye ghar mein shift ho rahe ho. Tumhare paas pack karne ke teen tarike hain: CSV waise hai jaise saari cheezein cardboard boxes mein daal do aur upar ek label lagao. Pack karna aasaan, koi bhi box khol ke label padh ke samajh sakta hai andar kya hai. Lekin agar tumhe apni saari kitaabein dhunddhni hain, toh har ek box kholna padega aur digging karni padegi.
JSON waise hai jaise clear plastic bins use karo aur andar har item par detailed label lagao. Structure dikh sakta hai—"is bin mein kitaabein hain, aur kitaabon ke section mein Harry Potter ka subsection hai." Bahut accha agar cheezein naturally groups mein hain, lekin saare labels ki wajah se zyada jagah leta hai.
Parquet ek professional moving company ki tarah hai jo sab kuch type ke hisaab se ek warehouse mein sort kar deti hai. Saari kitaabein ek section mein, saare kapde doosre section mein, sab vacuum bags mein compress. "Saari kitaabein" dhundhna instant hai—seedha book section mein jaao. Lekin pack aur unpack karne ke liye special tools chahiye (CSV ki tarah notepad mein simply nahi khul sakta).
Data load karte waqt, tum ye boxes unpack kar rahe ho. CSV tumhe sab kuch unpack karne par majboor karta hai chahe ek hi cheez chahiye ho. Parquet tumhe sirf woh section grab karne deta hai jo tumhe chahiye.
Connections
- 1.4.05-NumPy-arrays-and-operations — Parquet NumPy arrays efficiently store karta hai
- 1.4.06-Pandas-DataFrames-and-operations — Saara loading DataFrames produce karta hai
- 1.5.01-Handling-missing-data — CSV/JSON ko explicit NA handling chahiye
- 1.4.08-Data-cleaning-and-preprocessing — Loading step 1 hai, cleaning step 2 hai
- 2.3.05-Feature-engineeringtechniques — Parquet pipeline steps ke across feature types preserve karta hai
- 3.1.02-TensorFlow-and-Keras-basics — TensorFlow tf.data ke saath Parquet directly read kar sakta hai
#flashcards/ai-ml
CSV aur Parquet ke beech key structural difference kya hai? :: CSV row-oriented hai (har line = ek record), Parquet columnar hai (har column saath stored). Parquet se ek column padhna fast hai; CSV se karne ke liye saari rows scan karni padti hain.
Parquet specific columns ke liye CSV se faster kyun load karta hai?
pd.read_csv('file.csv', dtype={'age': int}) kya optimize karta hai?
read_csv mein chunksize parameter kab use karna chahiye?
chunksize=10000 ek baar mein 10k rows load karta hai, har chunk process karo, file size chahe kuch bhi ho memory bounded rehti hai.pd.json_normalize(data) kya karta hai?
{"user": {"name": "Alice"}} ko user.name ya user_name (sep parameter ke saath) jaise columns mein convert karta hai.Tabular data ke liye JSON CSV se bada kyun hota hai?
{"age": 25} vs CSV ka 25. Key repetition aur bracket/brace syntax ki wajah se overhead ~2-3× hota hai.Parquet mein predicate pushdown kya hai?
filters=[('age', '>', 25)] jaise filters use karna. Parquet row groups per row group min/max stats store karte hain—data padhne ke bina poore groups skip kar sakte hain. CSV mein possible nahi (sab padho, phir filter karo).JSON ke liye orient='records' kyun use karein?
[{...}, {...}]. Har object ek DataFrame row banta hai. Tabular JSON ke liye default.read_json mein lines=True ka kya matlab hai?
CSV ko Parquet mein kab convert karna chahiye?
Parquet archival ke liye kaun sa compression use karna chahiye?
compression='gzip' (~5-10× chhota) jab read speed critical na ho. Balanced speed aur size ke liye compression='snappy' (default) use karo (~2-3× chhota).Parquet data types preserve karta hai lekin CSV nahi karta, kyun?
Partitioned Parquet kya hai?
data/year=2024/, data/year=2025/. filters=[('year', '==', 2024)] ke saath padhne par sirf 2024 directory khulti hai, baaki skip—time-series ya categorical grouping ke liye bahut bada I/O saving.