如何在熊猫数据框中仅填充选定列的空值? [复制]
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 中用该列的第一个非空值填充该列的空值