将名称以字符串"abc_"开头的多个布尔列一次转换为整数dtype

iba*_*ant 4 python dataframe pandas

我需要在pandas数据帧中只有1和0而不是True和False,只有以abc_开头的列.除了我的循环之外,还有更好的方法吗?

for col in df:
  if col[:4] =='abc_':
     df[col] = df[col].astype(int) 
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 5

选项1:转换所有 boolean(dtype == 'bool')列

df.loc[:, df.dtypes.eq('bool')] = df.loc[:, df.dtypes.eq('bool')].astype(np.int8)
Run Code Online (Sandbox Code Playgroud)

选项2:如果只abc_应转换以开头的那些布尔列:

col_mask = df.dtypes.eq('bool') & df.columns.str.contains('^abc_')
df.loc[:, col_mask] = df.loc[:, col_mask].astype(np.int8)
Run Code Online (Sandbox Code Playgroud)

选项3:仅按列名转换

df.loc[:, df.columns.str.match(r'^abc_.*$')] = \
    df.filter(regex=r'^abc_').astype(np.int8)
Run Code Online (Sandbox Code Playgroud)


WeN*_*Ben 5

通过使用 str.contains

df.loc[:,df.columns.str.contains('abc_')]=df.loc[:,df.columns.str.contains('abc_')].astype(int)
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 5

您可以使用filter和就地执行此操作update.

df.update(df.filter(regex='^abc_').astype(int))
Run Code Online (Sandbox Code Playgroud)