为了账号安全,请及时绑定邮箱和手机立即绑定

使用 pandas .map 更改值

使用 pandas .map 更改值

慕标琳琳 2021-09-11 16:06:48
我正在尝试使用 map 函数更改数据中的字符串做数值。这是数据:    label   sms_message0   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_message0   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...任何人都可以识别问题吗?
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

你是对的,我认为你执行了两次相同的语句(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_messsage

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...

>>>

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

>>> df

   label                                       sms_messsage

0      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_messsage

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...

>>>

获得相同结果的其他方法

>>> 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_message

0  spam          M1

1   ham          M2

2   ham          M3

3   ham          M4

4  spam          M5

>>>

第一个方法-使用map()与dictionary参数


>>> new_values = {'spam': 1, 'ham': 0}

>>>

>>> df

  label sms_message

0  spam          M1

1   ham          M2

2   ham          M3

3   ham          M4

4  spam          M5

>>>

>>> df.label = df.label.map(new_values)

>>> df

   label sms_message

0      1          M1

1      0          M2

2      0          M3

3      0          M4

4      1          M5

>>>

第二个方法-使用map()与function参数


>>> df.label = df.label.map(lambda v: 0 if v == 'ham' else 1)

>>> df

   label sms_message

0      1          M1

1      0          M2

2      0          M3

3      0          M4

4      1          M5

>>>

第三个方法-使用apply()与function参数


>>> df.label = df.label.apply(lambda v: 0 if v == "ham" else 1)

>>>

>>> df

   label sms_message

0      1          M1

1      0          M2

2      0          M3

3      0          M4

4      1          M5

>>>

谢谢你。


查看完整回答
反对 回复 2021-09-11
  • 2 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号