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

如何在 pandas 中将脏字符串映射到数字

如何在 pandas 中将脏字符串映射到数字

明月笑刀无情 2023-10-06 18:33:21
我正在开发一个 python 项目,并且正在处理 csv 文件中的数据,并且尝试通过将数据从字符串转换为浮点值来将用户数据转换为可用的数据。这是一列相关的数据F10WhiteWhiteBlackAsian-Pac-IslanderWhiteBlack...这是我正在使用的代码;trainData = pd.read_csv('train.csv')trainData['F10'].map({' White': 0, ' Black': 1, ' Asian-Pac-Islander': 2, 'white': 0, 'White': 0, 'Black': 1, 'Asian-Pac-Islander': 2,  " White": 0, " Black": 1, " Asian-Pac-Islander": 2, "white": 0, "White": 0, "Black": 1, "Asian-Pac-Islander": 2})不幸的是,尽管如此,当我打印出trainData时,字符串Asian-Pac-Islander、White、Black仍然出现。我一直用这个作为指导,我做错了什么?
查看完整描述

2 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

最好使用小写值,因此您不必匹配所有变体。这可以通过 来实现str.lower()。

用于str.strip()删除前导和尾随空格

import pandas as pd


# test dataframe

trainData = pd.DataFrame({'F10': ['White ', 'White', 'Black', ' Asian-Pac-Islander', ' White ', ' Black']})


# strip, lower and map

trainData['F10_numeric'] = trainData['F10'].str.strip().str.lower().map({'white': 0, 'black': 1, 'asian-pac-islander': 2})


# display(trainData)

                   F10  F10_numeric

0               White             0

1                White            0

2                Black            1

3   Asian-Pac-Islander            2

4               White             0

5                Black            1

前面的代码不会修复该F10列,它只是针对映射进行调整。

下面将更新F10,然后将值映射到数字。

# fix F10

trainData['F10'] = trainData['F10'].str.strip().str.lower()


# map on the fixed F10 column

trainData['F10_numeric'] = trainData['F10'].map({'white': 0, 'black': 1, 'asian-pac-islander': 2})


# display(trainData)

                  F10  F10_numeric

0               white            0

1               white            0

2               black            1

3  asian-pac-islander            2

4               white            0

5               black            1


查看完整回答
反对 回复 2023-10-06
?
开满天机

TA贡献1786条经验 获得超12个赞

如果您想更改数据框中的实际列,则必须使用以下命令:

trainData['F10'].replace({' White': 0, ' Black': 1, ' Asian-Pac-Islander': 2, 'white': 0, 'White': 0, 'Black': 1, 'Asian-Pac-Islander': 2,  " White": 0, " Black": 1, " Asian-Pac-Islander": 2, "white": 0, "White": 0, "Black": 1, "Asian-Pac-Islander": 2}, inplace=True)

请注意,我使用了inplace=True

一个不需要的更好的替代方案inplace=True是:

trainData['F10'] = trainData['F10'].str.strip().str.lower().replace({'white': 0, 'black': 1, 'asian-pac-islander': 2})



查看完整回答
反对 回复 2023-10-06
  • 2 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信