我有一個如下所示的數(shù)據(jù)框:test = {"viral": "pos", "Status": "positive", "Age": 59, "score": 5}test2 = {"viral": "neg"}df = pd.DataFrame.from_dict([test, test2])我想將字符列(病毒、狀態(tài))編碼為序數(shù),但不要管數(shù)值。所需的輸出是具有相同列名的 numpy 數(shù)組。如果我使用 sklearn 的 OrdinalEncoder,它不會處理 NaN 值。即使沒有 NaN 值,它仍然會對數(shù)字列進(jìn)行序數(shù)編碼。我想在字符列中用 0 填充 NaN 值,但在數(shù)字列中保留 NaN。什么是最簡單的方法來做到這一點(diǎn)?所需的輸出(在 numpy 數(shù)組中): 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貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個贊
更新,當(dāng)有 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
添加回答
舉報
0/150
提交
取消