如何在熊猫数据框中仅填充选定列的空值? [复制]

Posted

技术标签:

【中文标题】如何在熊猫数据框中仅填充选定列的空值? [复制]【英文标题】:How do I fill null values of only selected columns in pandas dataframe? [duplicate] 【发布时间】:2020-07-14 00:05:59 【问题描述】:

我的数据框由多个具有 NaN 值的列组成。我想用 0 替换特定列(列名:MarkDown1)的 NaN 值。

我写的声明是:

data1.loc[:,['MarkDown1']] = data1.loc[:,['MarkDown1']].fillna(0)

我的声明发出警告:

    C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:965: SettingWithCopyWarning: 
    A value is trying to be set on a copy of a slice from a DataFrame.
    Try using .loc[row_indexer,col_indexer] = value instead

    See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
    self.obj[item] = s

我要求不要将我的问题标记为重复,因为我已经参考了文档和以前的问题,并尝试实施给出的建议。建议是使用 .loc。如上所述,我只在我的代码中使用了 .loc。但我仍然收到警告。请提出正确的语法以消除警告。

【问题讨论】:

试试data1['MarkDown1'] = data1['MarkDown1'].fillna(0) 试试,data1.loc[data1['MarkDown1'].isnull(), 'MarkDown1'] = 0 @Sociopath 和 Zoie。尝试了建议,但仍然收到警告。 你可以分配给 df :df = df.fillna('MarkDown1':0)。作为字典传入 【参考方案1】:

您的问题的根源是您可能创建了 data1 作为另一个 DataFrame 的视图

结果是:

data1 是一个单独的DataFrame, 但它与另一个(源)DataFrame 共享其数据缓冲区。

例子:

    我创建了一个名为 df 的 DataFrame,其内容如下:

       Xxx  MarkDown1
    0    1       10.0
    1    2       20.0
    2    3        NaN
    3    4       30.0
    4    5       40.0
    

    然后我创建了 data1 作为 df 的子集:

    data1 = df[df.Xxx < 5]
    

    当然,data1 现在包含(实际呈现)前 4 行 来自df

    当我执行你的指令时,出现了你的错误信息。

为了避免它创建 data1 作为一个单独的 DataFrame,有自己的数据缓冲区

data1 = df[df.Xxx < 5].copy()

这一次,当你运行你的指令时,不会发生错误。

【讨论】:

好主意,添加了新的欺骗。 是的,你是对的。感谢您提供的见解。

以上是关于如何在熊猫数据框中仅填充选定列的空值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中用该列的第一个非空值填充该列的空值

熊猫从以前的日期开始填充连续的空日期值+固定天数

用其他列的频率填充一行中的空值

如何将两个熊猫列混合到一个数据框中,第一列的第一个元素,第二列的第二个元素等等? [复制]

如何使用熊猫更改数据框中的日期时间格式? [复制]

如何在熊猫数据框中仅针对 dtype bool 列将 True 和 False 映射为“是”和“否”?