我想替换特定列的值。我可以逐个更改值,但是,我有数百列,我需要更改以特定字符串开头的列。这里有一个例子,当列名以"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)