Pandas系列.map将值更改为NaN

2024-04-26 00:44:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个SMS数据集,它有两列,一列是“label column”,由“ham/spam”组成,另一列是“messages”,由一堆字符串组成。你知道吗

我将“标签列”转换为数字标签,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

拜托,我需要一个办法来解决这个问题。你知道吗


Tags: 数据字符串labelscolumn数字标签nanspam
2条回答

行为系列.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})

@G.Anderson给出了你第二次重播时为什么会看到那些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

然而,它也取决于分类变量的数量和它们的基数(如果高,一个热编码可能不是最好的方法)。你知道吗

相关问题 更多 >