猿问

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

我正在开发一个 python 项目,并且正在处理 csv 文件中的数据,并且尝试通过将数据从字符串转换为浮点值来将用户数据转换为可用的数据。这是一列相关的数据


F10

White

White

Black

Asian-Pac-Islander

White

Black

...

这是我正在使用的代码;


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仍然出现。我一直用这个作为指导,我做错了什么?



明月笑刀无情
浏览 112回答 2
2回答

一只名叫tom的猫

最好使用小写值,因此您不必匹配所有变体。这可以通过 来实现str.lower()。用于str.strip()删除前导和尾随空格import pandas as pd# test dataframetrainData = pd.DataFrame({'F10': ['White ', 'White', 'Black', ' Asian-Pac-Islander', ' White ', ' Black']})# strip, lower and maptrainData['F10_numeric'] = trainData['F10'].str.strip().str.lower().map({'white': 0, 'black': 1, 'asian-pac-islander': 2})# display(trainData)                   F10  F10_numeric0               White             01                White            02                Black            13   Asian-Pac-Islander            24               White             05                Black            1前面的代码不会修复该F10列,它只是针对映射进行调整。下面将更新F10,然后将值映射到数字。# fix F10trainData['F10'] = trainData['F10'].str.strip().str.lower()# map on the fixed F10 columntrainData['F10_numeric'] = trainData['F10'].map({'white': 0, 'black': 1, 'asian-pac-islander': 2})# display(trainData)                  F10  F10_numeric0               white            01               white            02               black            13  asian-pac-islander            24               white            05               black            1

开满天机

如果您想更改数据框中的实际列,则必须使用以下命令: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})
随时随地看视频慕课网APP

相关分类

Python
我要回答