Python 熊猫不修改df

Python 熊猫不修改df,python,pandas,Python,Pandas,这里的熊猫是新来的。我有一个df: inked=tracker[['A','B','C','D','AA','BB','CC', 'DD', 'E', 'F']] 单字母列名包含名称,双字母列名包含数字,但也包含NaN 我使用以下方法将所有NaN转换为零: inked.loc[:,'AA':'DD'].fillna(0) 这很有效,但当我这么做的时候 inked.head() 我用NaN获得原始df。如何在df中永久地进行更改 默认情况下,不会就地执行fillna。如果直接在数据帧上操作,

这里的熊猫是新来的。我有一个df:

inked=tracker[['A','B','C','D','AA','BB','CC', 'DD', 'E', 'F']]
单字母列名包含名称,双字母列名包含数字,但也包含NaN

我使用以下方法将所有NaN转换为零:

inked.loc[:,'AA':'DD'].fillna(0)
这很有效,但当我这么做的时候

inked.head()
我用NaN获得原始df。如何在df中永久地进行更改

默认情况下,不会就地执行fillna。如果直接在数据帧上操作,则可以使用inplace=True参数,如下所示:

inked.fillna(0, inplace=True)
但是,如果首先使用loc选择列的子集,则结果将丢失

这是有报道的。基本上,您需要将更新后的数据帧重新分配回原始数据帧。对于列列表而不是范围,如您最初尝试的那样,可以执行以下操作:

inked[['AA','DD']] = inked[['AA','DD']].fillna(0)

通常,在执行数据帧操作时,如果要更改数据帧,则需要将其重新分配给自身或新变量。至少以我的经验来看
inked=inked.loc[:,'AA':'DD'].fillna0

我删除了我的,因为.loc[]操作创建了一个单独的副本,所以即使我们让fillna在适当的位置工作,它也是在临时数据上操作的。同样,我认为您的解决方案存在一个问题,即它将删除不在'AA'和'DD'之间的列。所以,我不应该使用loc?另一种选择是什么?你是对的,我马上应用了你的答案,但它仍然不起作用。loc[:,'AA':'DD']。fillna0也不起作用。我得到一个错误:AttributeError:“NoneType”对象没有属性“loc”@user7146708不确定。我的猜测是,许多这些操作破坏了您所做的一切,现在inked不再是一个数据帧。只要重新初始化inked并尝试一下。