如何仅将dtype bool列的大熊猫数据框中的对与错映射为“是”和“否”?
问题内容:
我有一个pandas
数据框(v 0.20.3):
df = pd.DataFrame({'coname1': ['Apple','Yahoo'], 'coname2':['Apple', 'Google']})
df['eq'] = df.apply(lambda row: row['coname1'] == row['coname2'], axis=1).astype(bool)
coname1 coname2 eq
0 Apple Apple True
1 Yahoo Google False
如果要替换True/False
为'Yes'/'No'
,可以运行以下命令:
df.replace({
True: 'Yes',
False: 'No'
})
coname1 coname2 eq
0 Apple Apple Yes
1 Yahoo Google No
这似乎可以完成工作。但是,如果数据框只是一行,且其列中的值为,则该数据帧0/1
也将被替换为布尔值。
df1 = pd.DataFrame({'coname1': [1], 'coname2':['Google'], 'coname3':[777]})
df1['eq'] = True
coname1 coname2 coname3 eq
0 1 Google 777 True
df1.replace({
True: 'Yes',
False: 'No'
})
coname1 coname2 coname3 eq
0 Yes Google 777 Yes
我想映射True/False
到Yes/No
的数据框中的所有列dtype
bool
。
我如何告诉pandas
运行True / False映射到任意字符串,仅针对那些dtype
bool
没有明确指定列名的列,因为我可能事先不知道它们的名称?
问题答案:
使用dtypes属性检查列是否为布尔值并根据该值进行过滤:
df = pd.DataFrame({'A': [0, 1], 'B': ['x', 'y'],
'C': [True, False], 'D': [False, True]})
df
Out:
A B C D
0 0 x True False
1 1 y False True
bool_cols = df.columns[df.dtypes == 'bool']
df[bool_cols] = df[bool_cols].replace({True: 'Yes', False: 'No'})
df
Out:
A B C D
0 0 x Yes No
1 1 y No Yes
我认为最快的方法是在循环中使用map:
for col in df.columns[df.dtypes == 'bool']:
df[col] = df[col].map({True: 'Yes', False: 'No'})