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

时间:2018-01-15 21:46:44

标签: python pandas dataframe

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

<!DOCTYPE html>
<html>

<head>
  <title>Cabinet Psychologie | 15&egrave;me</title>
  <link href="./Data/CSS/styling.css" rel="stylesheet" type="text/css">
</head>

<body noresize="noresize">
  <div class="navigation-box">
    <h1 class="navigation-menu">
      <a href="#" class="navigation-link active" >Accueil</a>
      <a class="vline"></a>
      <a href="./Data/Pages/cours.html" class="navigation-link">Cours</a>
      <a class="vline"></a>
      <a href="./Data/Pages/plans.html" class="navigation-link">Plans</a>
      <a class="vline"></a>
      <a href="./Data/Pages/plus.html" class="navigation-link">Plus</a>
    </h1>
  </div>
</body>

</html>

3 个答案:

答案 0 :(得分:5)

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

df.loc[:, df.dtypes.eq('bool')] = df.loc[:, df.dtypes.eq('bool')].astype(np.int8)

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

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

选项3:仅按列名转换

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

答案 1 :(得分:5)

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

df.update(df.filter(regex='^abc_').astype(int))

答案 2 :(得分:4)

使用str.contains

df.loc[:,df.columns.str.contains('abc_')]=df.loc[:,df.columns.str.contains('abc_')].astype(int)