How to convert categorical string data into numeric in Python?
Last Updated :
06 Apr, 2023
The datasets have both numerical and categorical features. Categorical features refer to string data types and can be easily understood by human beings. However, machines cannot interpret the categorical data directly. Therefore, the categorical data must be converted into numerical data for further processing.
There are many ways to convert categorical data into numerical data. Here in this article, we’ll be discussing the two most used methods namely :
- Dummy Variable Encoding
- Label Encoding
In both the Methods we are using the same data, the link to the dataset is here
Method 1: Dummy Variable Encoding
We will be using pandas.get_dummies function to convert the categorical string data into numeric.
Syntax:
pandas.get_dummies(data, prefix=None, prefix_sep=’_’, dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
Parameters :
- data : Pandas Series, or DataFrame
- prefix : str, list of str, or dict of str, default None. String to append DataFrame column names
- prefix_sep : str, default ‘_’. If appending prefix, separator/delimiter to use.
- dummy_na : bool, default False. Add a column to indicate NaNs, if False NaNs are ignored.
- columns : list-like, default None. Column names in the DataFrame to be encoded.
- sparse : bool, default False. Whether the dummy-encoded columns should be backed by a SparseArray (True) or a regular NumPy array (False).
- drop_first : bool, default False. Whether to get k-1 dummies out of k categorical levels by removing the first level.
- dtype : dtype, default np.uint8. It specifies the data type for new columns.
Returns : DataFrame
Stepwise Implementation
Step 1: Importing Libraries
Step 2: Importing Data
Python3
df = pd.read_csv( 'data.csv' )
df
|
Output:
Step 3: Converting Categorical Data Columns to Numerical.
We will convert the column ‘Purchased’ from categorical to numerical data type.
Python3
df1 = pd.get_dummies(df[ 'Purchased' ])
df = pd.concat([df, df1], axis = 1 ).reindex(df.index)
df.drop( 'Purchased' , axis = 1 , inplace = True )
df
|
Output:
Method 2: Label Encoding
We will be using .LabelEncoder() from sklearn library to convert categorical data to numerical data. We will use function fit_transform() in the process.
Syntax :
fit_transform(y)
Parameters :
- y : array-like of shape (n_samples). Target Values.
Returns : array-like of shape (n_samples) .Encoded labels.
Stepwise Implementation
Step 1: Importing Libraries
Step 2 : Importing Data
Python3
df = pd.read_csv( 'data.csv' )
df
|
Output:
Step 3 : Converting Categorical Data Columns to Numerical.
We will convert the column ‘Purchased’ from categorical to numerical data type.
Python3
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
label = le.fit_transform(df[ 'Purchased' ])
label
|
Output:
array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1])
Time Complexity: O(n log n) to O(n^2) because it involves sorting and finding unique values in the input data. Here, n is the number of elements in the df[‘Purchased’] array.
Auxiliary Space: O(k) where k is the number of unique labels in the df[‘Purchased’] array.
Step 4: Appending The Label Array to our DataFrame
Python3
df.drop( "Purchased" , axis = 1 , inplace = True )
df[ "Purchased" ] = label
df
|
Output:
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...