重置pd数据框中的值
我有一个数据表,里面有大于0的数值和一些空值(nan)。
我想把所有大于0的数值都改成1,但不想改变前两列的内容,代码是:
df_sort[df_sort.iloc[:,2] >= 0] = 1
实际上,这段代码会改变我整个数据表。
我只想把大于0的数值改成1,同时保留空值(nan)。
1 个回答
1
你的掩码不正确(切片有问题,而且你没有完整的数据框形状),你应该使用:
mask = (df_sort.iloc[:, 2:].ge(0)
.reindex(columns=df_sort.columns,
fill_value=False)
)
df_sort[mask] = 1
另外,你可以使用 numpy 的广播功能:
mask = df_sort.ge(0).to_numpy() & (np.arange(df_sort.shape[1])>2)[None]
df_sort[mask] = 1
示例输出:
0 1 2 3 4
0 0 None 1 1 None
1 None None None 1 None
2 1 2 1 None 1
3 0 0 1 1 1
4 2 None None 1 1
使用 >0
的示例输出(不是 >=0
):
0 1 2 3 4
0 0 None 1 0 None
1 None None None 1 None
2 1 2 0 None 1
3 0 0 0 1 1
4 2 None None 1 0
如果你想要针对大于0的值,并且只处理整数,你也可以使用 clip
和 update
:
df_sort.update(df_sort.iloc[:, 2:].clip(upper=1))
print(df_sort)
使用的输入:
import numpy as np
import pandas as pd
np.random.seed(0)
df_sort = pd.DataFrame(np.random.choice([0, 1, 2, None], size=(5, 5)))
0 1 2 3 4
0 0 None 1 0 None
1 None None None 1 None
2 1 2 0 None 2
3 0 0 0 2 1
4 2 None None 2 0