如何将.fillna()应用于过滤的数据框?

时间:2020-05-29 20:48:16

标签: python pandas

我正在使用女子世界杯的运动员数据集学习熊猫。

我要在主数据框的以下过滤器的结果上应用.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)

3 个答案:

答案 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)