重置pd数据框中的值

1 投票
1 回答
34 浏览
提问于 2025-04-12 20:07

我有一个数据表,里面有大于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

另外,你可以使用 的广播功能:

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的值,并且只处理整数,你也可以使用 clipupdate

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

撰写回答