![](/img/trans.png)
[英]Convert categorical data back to numbers using keras utils to_categorical
[英]Aggregate and Convert categorical data to numbers
我有一个数据框df_train,其中有一列sub_division。
该列中的值如下所示
ABC_commercial,
ABC_Private,
Test ROM DIV,
ROM DIV,
TEST SEC R&OM
我正在尝试1.将以ABC *开头的任何内容转换为数字(例如:1)2.将包含ROM和R&OM的任何内容转换为数字(例如:2)
提前致谢。
预期结果:
1,
1,
2,
2,
2
将numpy.select
与Series.str.startswith
和Series.str.contains
:
m1 = df['col'].str.startswith('ABC')
m2 = df['col'].str.contains('ROM|R&OM')
df['new'] = np.select([m1, m2], [1,2], default='no match')
#if need all numbers
#df['new'] = np.select([m1, m2], [1,2], default=0)
print (df)
col new
0 ABC_commercial, 1
1 ABC_Private, 1
2 Test ROM DIV, 2
3 ROM DIV, 2
4 TEST SEC R&OM 2
您可以执行以下操作。 请记住,如果没有匹配项,您将获得NaN
。 您可以在converter
函数中添加else
大小写,以获取默认值。
def converter(v):
if v.startswith('ABC'):
return 1
elif any(i in v for i in ['ROM', 'R&OM']):
return 2
df['sub_division'] = df['sub_division'].apply(converter)
print(df.head(10))
输出:
sub_division
0 1
1 1
2 2
3 2
4 2
您可以使用:
df.loc[df['col'].str.startswith('ABC'), 'col'] = 1
df.loc[df['col'].str.contains(r'ROM|R&OM', na=False), 'col'] = 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.