import pandas as pd
from sklearn.preprocessing import KBinsDiscretizer
# Load CSV file (must be uploaded to OnlineGDB)
df = pd.read_csv("exp2.csv")
print("\n=== Initial Data Info ===")
print(df.info())
# Remove unnecessary columns
df = df.drop(["Roll No", "Name of the Student"], axis=1)
# Handle Missing Values
df["Age"] = df["Age"].fillna(df["Age"].median())
df["Marks"] = df["Marks"].fillna(df["Marks"].median())
df["Grade"] = df["Grade"].fillna(df["Grade"].mode()[0])
df["Status"] = df["Status"].fillna(df["Status"].mode()[0])
print("\nMissing Values After Cleaning:")
print(df.isnull().sum())
# Remove Outliers (Cap Marks > 100)
df.loc[df["Marks"] > 100, "Marks"] = 100
# Discretization
kb = KBinsDiscretizer(n_bins=5, encode="ordinal", strategy="quantile")
df["Marks_Bin"] = kb.fit_transform(df[["Marks"]]).astype(int)
# Final Output
print("\n=== Final Processed Dataset ===")
print(df.head())
print("\n=== Final Dataset Info ===")
print(df.info())
Roll No,Name of the Student,Age,Marks,Grade,Status
1,Aarav,19,77,B,Pass
2,Isha,19,67,C,Pass
3,Rohan,19,4,F,Fail
4,Kavya,19,60,C,Pass
5,Arjun,20,91,S,Pass
6,Neha,NaN,53,D,Pass
7,Siddharth,20,12,F,Fail
8,Pooja,20,76,B,Pass
9,Diya,19,63,C,Pass
10,Kunal,20,45,E,Pass
11,Varun,20,17,F,Fail
12,Ananya,19,54,D,Pass
13,Rahul,21,61,C,Pass
14,Tanvi,19,70,B,Pass
15,Aditya,19,79,NaN,Pass
16,Simran,20,97,S,Pass
17,Mohit,19,92,S,Pass
18,Riya,19,66,C,Pass
19,Devansh,19,89,A,Pass
20,Sneha,19,88,A,Pass
21,Saurabh,21,48,E,Pass
22,Aditi,21,9,F,NaN
23,Pranav,19,74,B,Pass
24,Shalini,20,71,B,Pass
25,Yash,18,96,S,Pass
26,Nandini,21,83,A,Pass
27,Abhishek,20,63,C,Pass
28,Megha,21,66,C,Pass
29,Rohit,20,71,B,Pass
30,Pritika,19,65,C,Pass
31,Vishal,20,86,A,Pass
32,Kajal,19,50,D,Pass
33,Sanjay,21,2,F,Fail
34,Palki,19,21,F,Fail
35,Harsh,19,85,A,Pass
36,Sanya,20,80,A,Pass
37,Manish,20,87,A,Pass
38,Avni,21,69,C,Pass
39,Karthik,19,78,B,Pass
40,Roshni,20,55,D,Pass
41,Uday,21,64,C,Pass
42,Preeti,19,67,C,Pass
43,Tarun,19,62,C,Pass
44,Amrita,19,75,B,Pass
45,Rakesh,20,56,D,Pass
46,Iram,19,33,F,Fail
47,Ashwin,20,10,F,Fail
48,Sonali,19,75,B,Pass
49,Nitin,20,62,C,Pass
50,Zoya,19,77,B,Pass
51,Viraj,21,83,A,Pass
52,Bhavya,19,82,A,Pass
53,Rajat,20,150,S,Pass
54,Farah,20,78,B,Pass
55,Shubham,20,58,D,Pass
56,Pankhuri,19,69,C,Pass
57,Keerthi,20,45,E,Pass
58,Sameer,19,100,S,Pass
59,Ankit,20,78,B,Pass
60,Noor,20,80,A,Pass
61,Kiran,20,74,B,Pass
62,Ayaan,20,87,A,Pass
63,Ishita,19,65,C,Pass
64,Teja,19,51,D,Pass