使用 pandas .map 更改值

我正在尝试使用 map 函数更改数据中的字符串做数值。


这是数据:


    label   sms_message

0   ham     Go until jurong point, crazy.. Available only ...

1   ham     Ok lar... Joking wif u oni...

2   spam    Free entry in 2 a wkly comp to win FA Cup fina...

3   ham     U dun say so early hor... U c already then say...

4   ham     Nah I don't think he goes to usf, he lives aro...

我正在尝试使用以下方法将“垃圾邮件”更改为 1,将“火腿”更改为 0:


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

但结果是:


    label   sms_message

0   NaN     Go until jurong point, crazy.. Available only ...

1   NaN     Ok lar... Joking wif u oni...

2   NaN     Free entry in 2 a wkly comp to win FA Cup fina...

3   NaN     U dun say so early hor... U c already then say...

4   NaN     Nah I don't think he goes to usf, he lives aro...

任何人都可以识别问题吗?


慕标琳琳
浏览 209回答 2
2回答

开心每一天1111

你是对的,我认为你执行了两次相同的语句(1 后 1)。在 Python 交互式终端上执行的以下语句阐明了这一点。注意:如果你传递字典,map() 将替换 Series 中的所有值,NaN 如果它与字典的键不匹配(我认为,你也做了同样的事情,即执行两次语句)。检查熊猫地图(),应用()。Pandas 文档说明:当arg是字典时,系列中不在字典中的值(作为键)将转换为NaN。>>> import pandas as pd>>>>>> d = {...     "label": ["ham", "ham", "spam", "ham", "ham"],...     "sms_messsage": [...     "Go until jurong point, crazy.. Available only ...",...     "Ok lar... Joking wif u oni...",...     "Free entry in 2 a wkly comp to win FA Cup fina...",...     "U dun say so early hor... U c already then say...",...     "Nah I don't think he goes to usf, he lives aro..."...    ]... }>>>>>> df = pd.DataFrame(d)>>> df  label                                       sms_messsage0   ham  Go until jurong point, crazy.. Available only ...1   ham                      Ok lar... Joking wif u oni...2  spam  Free entry in 2 a wkly comp to win FA Cup fina...3   ham  U dun say so early hor... U c already then say...4   ham  Nah I don't think he goes to usf, he lives aro...>>>>>> df['label'] = df.label.map({'ham':0, 'spam':1})>>> df   label                                       sms_messsage0      0  Go until jurong point, crazy.. Available only ...1      0                      Ok lar... Joking wif u oni...2      1  Free entry in 2 a wkly comp to win FA Cup fina...3      0  U dun say so early hor... U c already then say...4      0  Nah I don't think he goes to usf, he lives aro...>>>>>> df['label'] = df.label.map({'ham':0, 'spam':1})>>> df   label                                       sms_messsage0    NaN  Go until jurong point, crazy.. Available only ...1    NaN                      Ok lar... Joking wif u oni...2    NaN  Free entry in 2 a wkly comp to win FA Cup fina...3    NaN  U dun say so early hor... U c already then say...4    NaN  Nah I don't think he goes to usf, he lives aro...>>>获得相同结果的其他方法>>> import pandas as pd>>>>>> d = {...     "label": ['spam', 'ham', 'ham', 'ham', 'spam'],...     "sms_message": ["M1", "M2", "M3", "M4", "M5"]... }>>>>>> df = pd.DataFrame(d)>>> df  label sms_message0  spam          M11   ham          M22   ham          M33   ham          M44  spam          M5>>>第一个方法-使用map()与dictionary参数>>> new_values = {'spam': 1, 'ham': 0}>>>>>> df  label sms_message0  spam          M11   ham          M22   ham          M33   ham          M44  spam          M5>>>>>> df.label = df.label.map(new_values)>>> df   label sms_message0      1          M11      0          M22      0          M33      0          M44      1          M5>>>第二个方法-使用map()与function参数>>> df.label = df.label.map(lambda v: 0 if v == 'ham' else 1)>>> df   label sms_message0      1          M11      0          M22      0          M33      0          M44      1          M5>>>第三个方法-使用apply()与function参数>>> df.label = df.label.apply(lambda v: 0 if v == "ham" else 1)>>>>>> df   label sms_message0      1          M11      0          M22      0          M33      0          M44      1          M5>>>谢谢你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python