熊猫不会在原地繁殖

我试图在数据帧中的4个特定列(字符串/对象类型)上用“”填充NAs。我可以将这些列指定给一个新变量,如I fillna(),但当I fillna()插入时,基础数据不会改变

a_n6=a_n6[[“最后一次验证”、“第一次验证”、“中间验证”、“规范NM”]。fillna(“”)
a_n6

给我:

<类“pandas.core.frame.DataFrame”>
INT64索引:1542个条目,0到3611
数据列(共4列):
PROV LAST 1542非空值
PROV FIRST 1542非空值
PROV MID 1542非空值
规格NM 1542非空值
数据类型:对象(4)

但是

a_n6[[“最后一次验证”、“第一次验证”、“中间验证”、“规范NM”]。fillna(“,inplace=True)
a_n6

给我:

<类“pandas.core.frame.DataFrame”>
INT64索引:1542个条目,0到3611
数据列(共7列):
NPI 1103非空值
引脚1542非空值
PROV FIRST 1541非空值
PROV LAST 1542非空值
PROV MID 1316非空值
规格NM 1541非空值
标志439非空值
数据类型:float64(2)、int64(1)、object(4)

这只是一排,但仍然令人沮丧。我做错了什么

使用dict作为fillna()

正如@rhkarls对@Jeff答案的评论中所提到的,使用索引到列列表的.loc将不支持in place操作,我也感到沮丧。这里有一个解决办法

例如:

将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({'a':[1,2,3,4,np.nan],
"b":[6,7,8,np.nan,np.nan],,
'x':[11,12,13,np.nan,np.nan],
‘y’:[16,np.nan,np.nan,19,np.nan]})
打印(df)
#a b x y
#0  1.0  6.0  11.0  16.0
#1 2.0 7.0 12.0 NaN
#2 3.0 8.0 13.0 NaN
#3 4.0楠楠19.0
#4楠楠楠楠

假设我们只想为xy填写ab

我希望使用.loc能起作用(如在作业中),但事实并非如此,如前所述:

#不起作用
df.loc[:,['x','y']].fillna(0,inplace=True)
打印(df)#未更改

但是,文档中指出,fillna()value参数可以是:

或者是一个dict/Series/DataFrame值,指定每个索引(对于系列)或列(对于数据帧)使用哪个值。(不在dict/Series/DataFrame中的值将不被填充)

事实证明,使用价值观的dict是可行的:

#有效
df.fillna({'x':0,'y':0},inplace=True)
打印(df)
#a b x y
#0  1.0  6.0  11.0  16.0
#1  2.0  7.0  12.0   0.0
#2  3.0  8.0  13.0   0.0
#3 4.0 NaN 0.0 19.0
#4楠楠0.0 0.0

此外,如果子集中有很多列,则可以使用dict理解,如:

df.fillna({x:0表示['x','y']}中的x,inplace=True)#

发表评论