对于仅以abc_开头的列,我需要在pandas数据帧中使用1和0而不是True和False。除了循环之外,还有更好的方法吗?
<!DOCTYPE html>
<html>
<head>
<title>Cabinet Psychologie | 15è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>
答案 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)