Pandas 如何仅替换数据帧子集中的值

Pandas 如何仅替换数据帧子集中的值,pandas,dataframe,numpy,Pandas,Dataframe,Numpy,我目前正试图找出如何替换pandas数据框中的一部分值。这是我提出的解决方案,但运行太慢(5分钟后仍未终止) new=df.loc[:,df.dtypes!=“O”] 新建=新建.掩码(新建

我目前正试图找出如何替换pandas数据框中的一部分值。这是我提出的解决方案,但运行太慢(5分钟后仍未终止)

new=df.loc[:,df.dtypes!=“O”]
新建=新建.掩码(新建<0)
df.loc[:,df.dtypes!=“O”]=新建
df
众所周知,Numpy的运行速度比熊猫快

因此,使用以下基于np的代码,其中:

我在形状(50000,3)的数据帧上使用%timeit执行了一个测试 (1个字符串、1个int和1个float列)并获得了大约 比您的代码短3倍,而另一种解决方案只有 比你的稍微好一点

还有一个关于%timeit用法的说明:因为您的代码改变了 源数据帧,然后在每次测试之前,您必须:

  • 再次创建数据帧(或从某个源复制数据帧)
  • 使用-r1和-n1选项运行%timeit(执行单个 测试运行)
否则,测试代码的后续执行将在
已更改数据帧(上次执行的结果)。

请粘贴您的数据帧和所需的结果,没有这些,我无法帮助您解决问题。
new = df.loc[:, df.dtypes != "O"]
new = new.mask(new < 0)
df.loc[:, df.dtypes != "O"] = new
df
for col in df:
    if df[col].dtype != 'O':
        df[col] = np.where(df[col] >= 0, df[col], np.nan)