gpt4 book ai didi

pandas - OneHotEncoder 给出 ValueError : Input contains NaN ; even though my DataFrame doesn't contain any NaN as indicated by df. isna()

转载 作者:行者123 更新时间:2023-12-05 07:04:42 24 4
gpt4 key购买 nike

我正在处理 titanic 数据集,并尝试在名为“Embarked”的列之一上应用 OneHotEncoding,该列具有 3 个可能的值“S”、“Q”和“C”。它给了我

ValueError: Input contains NaN

我使用两种方法检查了列的内容。第一个是带有 value_counts 的 for 循环,第二个是将整个表写入 csv:

for col in X.columns:
print(col)
print(X[col].value_counts(dropna=False))
X.isna().to_csv("xisna.csv")
print("notna================== :",X.notna().shape)
X.dropna(axis=0,how='any',inplace=True)
print("X.shape " ,X.shape)
return pd.DataFrame(X)

产生了

Embarked
S 518
C 139
Q 55
Name: Embarked, dtype: int64

我检查了 csv 的内容并阅读了 700 多个条目,我没有找到任何“正确”的陈述。

阻塞在 ("cat",One...) 处的管道

cat_attribs=["Sex","Embarked"]
special_attribs = {'drop_attribs' : ["Name","Cabin","Ticket","PassengerId"], k : [3]}

full_pipeline = ColumnTransformer([
("fill",fill_pipeline,list(strat_train_set)),
("emb_cat",OneHotEncoder(),['Sex']),
("cat",OneHotEncoder(),['Embarked']),
])

那么我缺少的 NaN 值到底在哪里?

最佳答案

我想通了,ColumnTransformer 将连接转换,而不是将它们传递给行中的下一个转换器。因此,在 fill_pipeline 中完成的任何转换都不会被 OneHotEncoder 注意到,因为它仍在使用未转换的数据集。所以我不得不将一个热编码放入 fill_pipeline 而不是 ColumnTransformer。

full_pipeline = ColumnTransformer([
("fill",fill_pipeline,list(strat_train_set)),
("emb_cat",OneHotEncoder(),['Sex']),
("cat",OneHotEncoder(),['Embarked']),
])

关于pandas - OneHotEncoder 给出 ValueError : Input contains NaN ; even though my DataFrame doesn't contain any NaN as indicated by df. isna(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62889445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com