我有一个给定的df值为0和nan.>

我想使用以下命令将所有值>0重置为1,但前两列除外:

df_sort[df_sort.iloc[:,2] >= 0] = 1

其实,这改变了我的整个DF.

我只想重置值0并保留nans.>

谢谢

推荐答案

您的蒙版不正确(切片已关闭,并且您没有完整的DataFrame形状),您应该使用:

mask = (df_sort.iloc[:, 2:].ge(0)
        .reindex(columns=df_sort.columns,
                 fill_value=False)
       )

df_sort[mask] = 1

Alternatively, with broadcasting:

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

Python相关问答推荐

TARete错误:类型对象任务没有属性模型'

我从带有langchain的mongoDB中的vector serch获得一个空数组

Polars LazyFrame在收集后未返回指定的模式顺序

Pandas 滚动最接近的价值

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

如何在Raspberry Pi上检测USB并使用Python访问它?

pandas:排序多级列

在嵌套span下的span中擦除信息

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

matplotlib + python foor loop

下三角形掩码与seaborn clustermap bug

在Google Drive中获取特定文件夹内的FolderID和文件夹名称

比Pandas 更好的 Select

Django抛出重复的键值违反唯一约束错误

如何关联来自两个Pandas DataFrame列的列表项?

是否将Pandas 数据帧标题/标题以纯文本格式转换为字符串输出?

Numpy`astype(Int)`给出`np.int64`而不是`int`-怎么办?

对包含JSON列的DataFrame进行分组

牛郎星直方图中分类列的设置顺序

IpyWidget Select 框未打开