सबसे पहले, चलो खेलने के लिए एक mcve बनाएँ :
import pandas as pd
import numpy as np
In [1]: categorical_array = np.random.choice(['Var1','Var2','Var3'],
size=(5,3), p=[0.25,0.5,0.25])
df = pd.DataFrame(categorical_array,
columns=map(lambda x:chr(97+x), range(categorical_array.shape[1])))
# Add another column that isn't categorical but float
df['d'] = np.random.rand(len(df))
print(df)
Out[1]:
a b c d
0 Var3 Var3 Var3 0.953153
1 Var1 Var2 Var1 0.924896
2 Var2 Var2 Var2 0.273205
3 Var2 Var1 Var3 0.459676
4 Var2 Var1 Var1 0.114358
अब हम पहले तीन कॉलम को एनकोड करने के लिए pd.get_dummies का उपयोग कर सकते हैं।
ध्यान दें कि मैं drop_first
पैरामीटर का उपयोग कर रहा हूं क्योंकि N-1
डमी पूरी तरह से N
संभावनाओं का वर्णन करने के लिए पर्याप्त हैं (जैसे: यदि a_Var2
और a_Var3
0 हैं, तो यह है a_Var1
)। इसके अलावा, मैं विशेष रूप से स्तंभों को निर्दिष्ट कर रहा हूं, लेकिन मुझे यह करने की आवश्यकता नहीं है क्योंकि यह object
या तो dtype या categorical
(नीचे अधिक) वाले कॉलम होंगे ।
In [2]: df_encoded = pd.get_dummies(df, columns=['a','b', 'c'], drop_first=True)
print(df_encoded]
Out[2]:
d a_Var2 a_Var3 b_Var2 b_Var3 c_Var2 c_Var3
0 0.953153 0 1 0 1 0 1
1 0.924896 0 0 1 0 0 0
2 0.273205 1 0 1 0 1 0
3 0.459676 1 0 0 0 0 1
4 0.114358 1 0 0 0 0 0
अपने विशिष्ट एप्लिकेशन में, आपको कॉलम की एक सूची प्रदान करनी होगी जो श्रेणीबद्ध हैं, या आपको यह पता लगाना होगा कि कौन-से कॉलम श्रेणीबद्ध हैं।
बेस्ट स्थिति अपने dataframe पहले से ही एक साथ इन स्तंभ होते हैं dtype=category
और आप पास कर सकते हैं columns=df.columns[df.dtypes == 'category']
करने के लिए get_dummies
।
अन्यथा मैं dtype
अन्य सभी स्तंभों को उपयुक्त के रूप में स्थापित करने का सुझाव देता हूं (संकेत: pd.to_numeric, pd.to_datetime, आदि) और आपको उन स्तंभों के साथ छोड़ दिया जाएगा जिनमें एक object
dtype है और ये आपके श्रेणीबद्ध कॉलम होने चाहिए।
Pd.get_dummies पैरामीटर कॉलम डिफॉल्ट इस प्रकार है:
columns : list-like, default None
Column names in the DataFrame to be encoded.
If `columns` is None then all the columns with
`object` or `category` dtype will be converted.