Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将多个列从零替换为Nan_Python_Pandas_Dataframe_Data Cleaning - Fatal编程技术网

Python将多个列从零替换为Nan

Python将多个列从零替换为Nan,python,pandas,dataframe,data-cleaning,Python,Pandas,Dataframe,Data Cleaning,带有加载到pandas dataframedf2中的人员属性的列表。对于清理,我想用np.nan替换值零(0或'0') df2.dtypes ID object Name object Weight float64 Height float64 BootSize object SuitSize object Type

带有加载到pandas dataframe
df2
中的人员属性的列表。对于清理,我想用
np.nan
替换值零(
0
'0'

df2.dtypes

ID                   object
Name                 object
Weight              float64
Height              float64
BootSize             object
SuitSize             object
Type                 object
dtype: object
将值0设置为
np.nan
的工作代码:

df2.loc[df2['Weight'] == 0,'Weight'] = np.nan
df2.loc[df2['Height'] == 0,'Height'] = np.nan
df2.loc[df2['BootSize'] == '0','BootSize'] = np.nan
df2.loc[df2['SuitSize'] == '0','SuitSize'] = np.nan
相信这可以通过类似/更短的方式完成:

df2[["Weight","Height","BootSize","SuitSize"]].astype(str).replace('0',np.nan)
但是,上述方法不起作用。零位仍保留在df2中。如何解决这个问题?

我想你需要

cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].replace({'0':np.nan, 0:np.nan})

您可以使用“replace”方法,将要在列表中替换的值作为第一个参数传递,同时将所需的值作为第二个参数传递:

cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].replace(['0', 0], np.nan)
尝试:


另一种替代方式:

cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].mask(df2[cols].eq(0) | df2[cols].eq('0'))

我想知道为什么这个解决方案有效,而
df2[cols].replace({'0':np.nan,0:np.nan},inplace=True)
给出了一个错误
试图在数据帧的切片副本上设置一个值
?这不是错误。这只是一个警告。基本上,那里可能有内存问题。@M.Mariscal-Use
.replace({.':'')
不起作用,我的代码是:cols=['Total','uno','dos']df[cols]=df[cols]。replace({.':'})问题是to_csv我能看到要点,但因为它有数千个,但没有意义…csv是一团乱,我需要对它进行排序,但找不到正确的方式。这是我认为最干净的解决方案。你也不需要将其作为kwarg传递。只需要dict就可以了。作为参考->,类似dict的
to_replace
部分
df2.replace(to_replace={
             'Weight':{0:np.nan}, 
             'Height':{0:np.nan},
             'BootSize':{'0':np.nan},
             'SuitSize':{'0':np.nan},
                 })
cols = ["Weight","Height","BootSize","SuitSize","Type"]
df2[cols] = df2[cols].mask(df2[cols].eq(0) | df2[cols].eq('0'))