熊猫series.map将值更改为NaN

时间:2020-01-03 20:16:10

标签: python pandas machine-learning

我正在处理一个SMS数据集,该数据集有两列:“标签列”,由“火腿/垃圾邮件”组成;另一列“消息”,由一串字符串组成。

我将“标签列”转换为数字标签,ham = 1,spam = 0

#Converting our labels to numeric labels
# ham = 0 and spam = 1
dfcat = dataset['label']=dataset.label.map({'ham':1,'spam':0})
dfcat.head()

因此,当我第一次运行上面的代码时,它给了我确切的信息,但是在我再次运行它之后,它开始给了我“ Nan”。

Out[108]: 
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
Name: label, dtype: float64

请,我需要一种解决方法。

2 个答案:

答案 0 :(得分:0)

@G。 Anderson给出了为什么您第二次重新运行NaN时仍会看到这些NaN的原因。

关于在Python中处理分类变量的一种方法,可以使用one hot encoding。下面的玩具示例:

import pandas as pd

df = pd.DataFrame({"col1": ["a", "b", "c"], "label": ["ham", "spam", "ham"]})
df_ohe = pd.get_dummies(df, prefix="ohe", drop_first=True, columns=["label"])
df_ohe

但是,这还取决于分类变量的数量及其基数(如果过高,则一种热编码可能不是最佳方法)。

答案 1 :(得分:0)

series.map()函数的行为是替换提供的词典中的值,并将其他值更改为NaN。如果要多次运行同一行代码,则需要考虑所有值。您可以使用defaultdict(它允许设置默认值),也可以只包含第一次运行的结果作为输入,以防第二次运行。 更改

dfcat = dataset['label']=dataset.label.map({'ham':1,'spam':0})

dfcat = dataset['label']=dataset.label.map({'ham':1,'spam':0,1:1,0:0})
相关问题