我有一个包含多个列的 DataFrame,其中包含"is"和“否”字符串。我希望所有这些都转换为 bool 数据类型。要映射一列,我会使用
dict_map_yn_bool={'yes':True, 'no':False}
df['nearby_subway_station'].map(dict_map_yn_bool)
这将完成一列的工作。如何用一行代码替换多列?
最佳答案
您可以使用 applymap
:
df = pd.DataFrame({'nearby_subway_station':['yes','no'], 'Station':['no','yes']})
print (df)
Station nearby_subway_station
0 no yes
1 yes no
dict_map_yn_bool={'yes':True, 'no':False}
df = df.applymap(dict_map_yn_bool.get)
print (df)
Station nearby_subway_station
0 False True
1 True False
另一种解决方案:
for x in df:
df[x] = df[x].map(dict_map_yn_bool)
print (df)
Station nearby_subway_station
0 False True
1 True False
谢谢 Jon Clements非常好的主意 - 使用 replace
:
df = df.replace({'yes': True, 'no': False})
print (df)
Station nearby_subway_station
0 False True
1 True False
dict
中没有数据时的一些区别:
df = pd.DataFrame({'nearby_subway_station':['yes','no','a'], 'Station':['no','yes','no']})
print (df)
Station nearby_subway_station
0 no yes
1 yes no
2 no a
applymap
为 boolean
,strings
,为数字 NaN
创建 None
。
df = df.applymap(dict_map_yn_bool.get)
print (df)
Station nearby_subway_station
0 False True
1 True False
2 False None
map
创建NaN
:
for x in df:
df[x] = df[x].map(dict_map_yn_bool)
print (df)
Station nearby_subway_station
0 False True
1 True False
2 False NaN
replace
不创建 NaN
或 None
,但原始数据未受影响:
df = df.replace(dict_map_yn_bool)
print (df)
Station nearby_subway_station
0 False True
1 True False
2 False a
关于python - 通过 Pandas 中的单个字典映射多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725799/