Data Science · मराठी आवृत्ती
16.3 Data clean करूया
Raw CSV वाचून columns/text एकसारखे करा, amounts आणि dates parse करा, आणि या lab च्या नियमानुसार impossible minutes हाताळा:
df = pd.read_csv("data/blinkit_maha_raw.csv")
df.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
df["city"] = df["city"].astype(str).str.strip().str.title()
# Fix Sambhaji Nagar title-case edge cases if needed
df["city"] = df["city"].replace({"Sambhaji Nagar": "Sambhaji Nagar"})
df["status"] = df["status"].str.strip().str.title()
df["amount"] = (
df["amount"].astype(str).str.replace(",", "", regex=False)
)
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
df["order_date"] = pd.to_datetime(df["order_date"], dayfirst=True)
df.loc[df["delivery_mins"] > 120, "delivery_mins"] = np.nan
df["delivery_mins"] = df["delivery_mins"].fillna(df["delivery_mins"].median())
before = len(df)
df = df.drop_duplicates(subset=["order_id"], keep="first")
print("rows", before, "->", len(df), "null amounts", df["amount"].isna().sum())
df.to_csv("data/orders_clean.csv", index=False)
Pipeline चा क्रम
- Raw CSV load करा.
- Column names, city आणि status text normalise करा.
- Amounts numeric आणि dates dayfirst=True वापरून parse करा.
- Impossible delivery minutes दुरुस्त करा.
- Duplicate order_ids काढून row counts नोंदवा.
orders_clean.csvsave करा.
या generator मध्ये order_id unique आहे. Real line-level data मध्ये योग्य line key ठरवूनच duplicates हाताळा.