Melanjutkan dari modul sebelumnya, kita akan melakukan optimisasi dataframe dengan mengubah tipedata kolom.
Berikut status terakhir dari modul sebelumnya.
import pandas as pd
df = pd.read_csv("employees.csv", parse_dates=["Start Date", "Last Login Time"])
df.info()
df.head(3)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 First Name 933 non-null object
1 Gender 855 non-null object
2 Start Date 1000 non-null datetime64[ns]
3 Last Login Time 1000 non-null datetime64[ns]
4 Salary 1000 non-null int64
5 Bonus % 1000 non-null float64
6 Senior Management 933 non-null object
7 Team 957 non-null object
dtypes: datetime64[ns](2), float64(1), int64(1), object(4)
memory usage: 62.6+ KB
Dari info diatas, dapat dilakukan optimisasi untuk kolom:
- Gender, dari string menjadi Category.
- Senior Management, dari string menjadi boolean.
df["Gender"] = df["Gender"].astype("category")
df["Senior Management"] = df["Senior Management"].astype("bool")
df["Team"] = df["Team"].astype("category")
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 First Name 933 non-null object
1 Gender 855 non-null category
2 Start Date 1000 non-null datetime64[ns]
3 Last Login Time 1000 non-null datetime64[ns]
4 Salary 1000 non-null int64
5 Bonus % 1000 non-null float64
6 Senior Management 1000 non-null bool
7 Team 957 non-null category
dtypes: bool(1), category(2), datetime64[ns](2), float64(1), int64(1), object(1)
memory usage: 42.6+ KB
Jika kita bandingkan memory usage turun menjadi 42.6+ KB dari 62.6+ KB.