为了账号安全,请及时绑定邮箱和手机立即绑定

将字符列编码为序数但保持数字列相同

将字符列编码为序数但保持数字列相同

慕哥6287543 2021-08-17 18:23:11
我有一个如下所示的数据框:test = {"viral": "pos", "Status": "positive", "Age": 59, "score": 5}test2 = {"viral": "neg"}df = pd.DataFrame.from_dict([test, test2])我想将字符列(病毒、状态)编码为序数,但不要管数值。所需的输出是具有相同列名的 numpy 数组。如果我使用 sklearn 的 OrdinalEncoder,它不会处理 NaN 值。即使没有 NaN 值,它仍然会对数字列进行序数编码。我想在字符列中用 0 填充 NaN 值,但在数字列中保留 NaN。什么是最简单的方法来做到这一点?所需的输出(在 numpy 数组中):    Age    Status  score viral0  59.0         1    5.0     11   NaN         0    NaN     0谢谢!杰克编辑:我还想要一个从编码值到原始值的映射,就像{i: dict(enumerate(v)) for i, v in enumerate(enc.categories_)}使用时一样enc=OrdinalEncoder()(参见Vectorize 2D character array column-wise)
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

更新,当有 NaN 时,它会将代码分类为 -1 ,如果您需要 NaN,您可以使用 replace


df=pd.DataFrame([test,test2])

df.dtypes

Out[152]:

Age       float64

Status     object

score     float64

viral      object

dtype: object

listc=df.columns[df.dtypes=='object']


for x in listc:

    df[x]=df[x].astype('category').cat.codes


df

Out[156]: 

    Age  Status  score  viral

0  59.0       0    5.0      1

1   NaN      -1    NaN      0


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号