Practical 3:Data Cleaning on Data set
Dataset taken:-Loan_Credit_Score 
Code:-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df=pd.read_csv('/content/sample_data/loan_credit_dataset_240_rows_with_outliers.csv')
print(df.head())
print(df.info())
print(df.describe())
print(df.isnull().sum()) #missing value
print("Duplicate rows:",df.duplicated().sum()) #duplicate values
print(df.dtypes)
#finding outliers in data
print("Before removing outliers:")
columns = [
    "AnnualIncome",
    "CreditScore",
    "LoanAmount",
    "DebtToIncomeRatio",
    "EmploymentYears"
]
for col in columns:
    plt.figure(figsize=(6,4))
    plt.boxplot(df[col])
    plt.title(f"Box Plot of {col}")
    plt.ylabel(col)
    plt.grid(True)
    plt.show()
print("identifying and removing outliers")
def remove_outliers(column):
    Q1=column.quantile(0.25)
    Q3=column.quantile(0.75)
    IQR=Q3-Q1
    lower=Q1-1.5*IQR
    upper=Q3+1.5*IQR
    print(f"\nColumn statistics:Q1={Q1},Q3={Q3},IQR={IQR}")
    print(f"Outlier bounds: lower={lower}, upper={upper}")
    return column.apply(lambda x: np.nan if (x < lower or x > upper) else x)
for col in columns:
    df[col] = remove_outliers(df[col])
print("After removing outliers:")
for col in columns:
    plt.figure(figsize=(6,4))
    plt.boxplot(df[col].dropna())
    plt.title(f"Box Plot of {col}")
    plt.ylabel(col)
    plt.grid(True)
Output:-
 Before removing outliers:
identifying and removing outliers