Python 在DataFrame中将字符串列转换为布尔指示符列
我有一个带有一些数值和一些分类(str)值的熊猫数据框,让我们这样说:Python 在DataFrame中将字符串列转换为布尔指示符列,python,pandas,Python,Pandas,我有一个带有一些数值和一些分类(str)值的熊猫数据框,让我们这样说: A B C D 0 x y a 2 1 x x aa 1 2 y z aa 4 3 y z aa 4 4 x y aaaa 0 我想把所有的分类值转换成布尔指标。由于某些列可以具有相同的值名称,因此我希望为要区分的分类值创建名称,例如列_name+'is+value _name 预期结果是: D A_is_x A_is_y B_is_y
A B C D
0 x y a 2
1 x x aa 1
2 y z aa 4
3 y z aa 4
4 x y aaaa 0
我想把所有的分类值转换成布尔指标。由于某些列可以具有相同的值名称,因此我希望为要区分的分类值创建名称,例如列_name+'is+value _name
预期结果是:
D A_is_x A_is_y B_is_y B_is_x B_is_z C_is_a C_is_aa C_is_aaaa
0 2 True False True False False True False False
1 1 True False False True False False True False
2 4 False True False False True False True False
3 4 False True False False True False True False
4 0 True False True False False False False True
我写了一些有效的代码,但不是很像Python
for col in data.columns:
if not np.issubdtype(data[col].dtypes, np.number):
values = data[col].unique()
for value in values:
data[col + '_is_' + value] = data[col].map(lambda x: x == value)
data = data.drop(col, axis=1)
我尝试使用pd.get_假人来编写这篇文章,但在方便地命名新创建的列时遇到了问题。有没有比我的更简单更干净的解决办法
我知道有一些相关的问题,但没有一个能解决我在方便地命名列方面的问题。与参数一起使用前缀\u sep='''u is'
和dtype=bool
,数字列不在处理中-是您需要的第一个数据:
df = pd.get_dummies(df, prefix_sep='_is_', dtype=bool)
print (df)
D A_is_x A_is_y B_is_x B_is_y B_is_z C_is_a C_is_aa C_is_aaaa
0 2 True False False True False True False False
1 1 True False True False False False True False
2 4 False True False False True False True False
3 4 False True False False True False True False
4 0 True False False True False False False True
与参数前缀\u sep=''一起使用
df = pd.get_dummies(df, prefix_sep='_is_', dtype=bool)
print (df)
D A_is_x A_is_y B_is_x B_is_y B_is_z C_is_a C_is_aa C_is_aaaa
0 2 True False False True False True False False
1 1 True False True False False False True False
2 4 False True False False True False True False
3 4 False True False False True False True False
4 0 True False False True False False False True
检查get_dummies
df = df[['D']].join(pd.get_dummies(df[['A', 'B', 'C']], prefix_sep='_is_').astype(bool))
df
Out[390]:
D A_is_x A_is_y B_is_x B_is_y B_is_z C_is_a C_is_aa C_is_aaaa
0 2 True False False True False True False False
1 1 True False True False False False True False
2 4 False True False False True False True False
3 4 False True False False True False True False
4 0 True False False True False False False True
检查get_dummies
df = df[['D']].join(pd.get_dummies(df[['A', 'B', 'C']], prefix_sep='_is_').astype(bool))
df
Out[390]:
D A_is_x A_is_y B_is_x B_is_y B_is_z C_is_a C_is_aa C_is_aaaa
0 2 True False False True False True False False
1 1 True False True False False False True False
2 4 False True False False True False True False
3 4 False True False False True False True False
4 0 True False False True False False False True