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