Pandas 中的 get_dummies()
方法用于将分类变量转换为虚拟变量。
每个类别都被转换为一个新列,其中包含二进制值(1 或 0),指示该类别在原始数据中的存在情况。
示例
import pandas as pd
# create a Series
data = pd.Series(['A', 'B', 'A', 'C', 'B'])
# use get_dummies on the Series
dummies = pd.get_dummies(data)
print(dummies)
'''
Output
A B C
0 1 0 0
1 0 1 0
2 1 0 0
3 0 0 1
4 0 1 0
'''
get_dummies() 语法
Pandas 中 get_dummies()
方法的语法是
get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, drop_first=False)
get_dummies() 参数
get_dummies()
方法接受以下参数
data
- 要转换的输入数据prefix
(可选) - 要附加到 DataFrame 列名的字符串prefix_sep
(可选) - 前缀和虚拟列名之间的分隔符dummy_na
(可选) - 添加一列来指示 NaNs,如果设置为False
,则忽略 NaNs。drop_first
(可选) - 是否删除第一个级别
get_dummies() 返回值
get_dummies()
方法返回一个 DataFrame,其中输入中的值成为单独的列,并用二进制值(1 和 0)填充,指示该值在原始数据每行的存在或不存在。
示例 1:在 Pandas 中按单列分组
import pandas as pd
# create a Series
data = pd.Series(['apple', 'orange', 'apple', 'banana'])
# use get_dummies() to convert the series into dummy variables
dummy_data = pd.get_dummies(data)
print(dummy_data)
输出
apple banana orange 0 1 0 0 1 0 0 1 2 1 0 0 3 0 1 0
在上面的示例中,我们创建了包含水果名称的 data Series。
然后我们应用了 get_dummies()
,它创建了一个新的 DataFrame,其中每个水果名称都成为一列。
对于 data Series 的每一行,新 DataFrame 中对应的列如果存在水果名称,则为 1,否则为 0。
示例 2:使用前缀应用 get_dummies()
import pandas as pd
# sample data
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}
# create a DataFrame
df = pd.DataFrame(data)
# get dummies with a specified prefix
dummies = pd.get_dummies(df['Color'], prefix='Color')
print(dummies)
输出
Color Color_Blue Color_Green Color_Red
0 Red 0 0 1
1 Green 0 1 0
2 Blue 1 0 0
3 Green 0 1 0
4 Red 0 0 1
在这里,我们将 prefix='Color'
参数传递给了 get_dummies()
,因此新的虚拟变量列的前缀是 Color_
。
因此,生成的 DataFrame 包含 Color_Blue
、Color_Green
和 Color_Red
列,分别表示相应颜色类别的存在或不存在。
示例 3:使用指定的前缀和前缀分隔符获取虚拟变量
import pandas as pd
# sample data
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}
# create a DataFrame
df = pd.DataFrame(data)
# get dummies with a specified prefix and prefix separator
dummies = pd.get_dummies(df['Color'], prefix='Color', prefix_sep='--')
print(dummies)
输出
Color--Blue Color--Green Color--Red
0 0 0 1
1 0 1 0
2 1 0 0
3 0 1 0
4 0 0 1
在此示例中,prefix_sep='--'
参数意味着前缀和原始类别名称将用 --
分隔。
因此,对于像 Blue
这样的颜色,虚拟 DataFrame 中生成的列名将是 Color--Blue
,以此类推。
示例 4:使用 dummy_na 管理缺失数据
import pandas as pd
# sample data with a missing value
data = {'Color': ['Red', 'Green', 'Blue', None, 'Red']}
# create a DataFrame
df = pd.DataFrame(data)
# get dummies without considering NaN
dummies_without_nan = pd.get_dummies(df['Color'])
# get dummies considering NaN
dummies_with_nan = pd.get_dummies(df['Color'], dummy_na=True)
print("Dummies without NaN handling:\n", dummies_without_nan)
print("\nDummies with NaN handling:\n", dummies_with_nan)
输出
Dummies without NaN handling:
Blue Green Red
0 0 0 1
1 0 1 0
2 1 0 0
3 0 0 0
4 0 0 1
Dummies with NaN handling:
Blue Green Red NaN
0 0 0 1 0
1 0 1 0 0
2 1 0 0 0
3 0 0 0 1
4 0 0 1 0
这里,
get_dummies(df['Color'])
- 生成Red
、Green
和Blue
列,但没有指示NaN
值。get_dummies(df['Color'], dummy_na=True)
- 生成相同的列,并添加一个名为NaN
的额外列,指示原始数据中NaN
值存在的位置。
示例 5:指定虚拟编码的列
import pandas as pd
# sample data
data = {'Color': ['Red', 'Green', 'Blue', 'Green', 'Red']}
# creating a DataFrame
df = pd.DataFrame(data)
# getting dummies without dropping any columns
dummies_all = pd.get_dummies(df['Color'])
print("DataFrame with all dummy columns:")
print(dummies_all)
print("\n")
# getting dummies and dropping the first category column ('Blue' in this case)
dummies = pd.get_dummies(df['Color'], drop_first=True)
print("DataFrame after dropping 'Blue':")
print(dummies)
输出
DataFrame with all dummy columns:
Color Blue Green Red
0 Red 0 0 1
1 Green 0 1 0
2 Blue 1 0 0
3 Green 0 1 0
4 Red 0 0 1
DataFrame after dropping 'Blue':
Color Green Red
0 Red 0 1
1 Green 1 0
2 Blue 0 0
3 Green 1 0
4 Red 0 1
在此,将 drop_first=True
参数传递给 get_dummies()
,以指示已删除第一个类别。
因此,生成的 DataFrame 包含 Green
和 Red
两列。由于 Blue
类别已被删除,因此在这些列中未表示。