在panda中使用regex仅替换特定列上的列值



我想替换特定列的值。我可以逐个更改值,但是,我有数百列,我需要更改以特定字符串开头的列。这里有一个例子,当列名以"Q14"开头时,我想替换字符串

df.filter(regex = 'Q14').replace(1, 'Selected').replace(0, 'Not selected')

上面的代码正在工作。但是,如何在我的dataframe中实现它呢?因为这是函数,所以我不能在原地使用。

考虑以下df:

In [439]: df = pd.DataFrame({'Q14_A':[ 1,0,0,2], 'Q14_B':[0,1,1,2], 'Q12_A':[1,0,0,0]})
In [440]: df
Out[440]: 
Q14_A  Q14_B  Q12_A
0      1      0      1
1      0      1      0
2      0      1      0
3      2      2      0

筛选以Q14开头的列,将其保存在变量中:

In [443]: cols = df.filter(regex='^Q14').columns

现在,用replace命令更改上面选择的列:

In [446]: df[cols] = df[cols].replace(1, 'Selected').replace(0, 'Not selected')

输出:

In [447]: df
Out[447]: 
Q14_A         Q14_B  Q12_A
0      Selected  Not selected      1
1  Not selected      Selected      0
2  Not selected      Selected      0
3             2             2      0

您可以迭代所有列,并根据匹配的条件使用apply命令应用列转换:

for column in df.columns:
if column.startswith("Q"):
df[column] = df[column].apply(lambda x: "Selected" if x == 1 else "Not selected")

使用熊猫。系列替换dict

df = pd.DataFrame({'Q14_A':[ 1,0,0,2], 'Q14_B':[0,1,1,2], 'Q12_A':[1,0,0,0]})
cols = df.filter(regex='^Q14').columns
replace_map = {
1: "Selected",
0 : "Not Selected"
}
df[cols] = df[cols].replace(replace_map)

最新更新