我正在使用女子世界杯的运动员数据集学习熊猫。
我要在主数据框的以下过滤器的结果上应用.fillna():
df[(df["pos"] == "GK") & (df["goals"].isnull())]
我该如何申请:
fillna(0, inplace=True)
对于上述过滤器,“目标”列上的。
我确实使用了下面的代码,但是当我应用它时,它可以运行但似乎不起作用:
df.loc[df["pos"] == "GK"].loc[df["goals"].isnull()].loc[:,"goals"].fillna(0, inplace=True)
答案 0 :(得分:1)
第一行选择索引,您知道该列,因此只需使用一个loc
,就可以了:
df.loc[(df["pos"] == "GK") & (df["goals"].isnull()), 'goals'].fillna(0, inplace=True)
因此,熊猫似乎返回了一个副本,而inplace
在那里实际上什么也没做。但是,您不想将其分配给所有数据框。
由于您已经在过滤nan值,因此一种更简单的方法是直接分配值。
df.loc[(df["pos"] == "GK") & (df["goals"].isnull()), 'goals'] = 0
在我的计算机上,此方法工作正常,希望可以解决您的问题。
答案 1 :(得分:0)
df[(df["pos"] == "GK") & (df["goals"].isnull()), 'goals']=0
那将解决您的问题。
答案 2 :(得分:0)
您已经使用布尔选择遮罩了。所以只是.fillna(0)
df[(df["pos"] == "GK") & (df["goals"].isnull())].fillna(0)