Python 如何仅填充dataframe中选定列的空值?

Python 如何仅填充dataframe中选定列的空值?,python,pandas,Python,Pandas,我的dataframe由多个具有NaN值的列组成。我只想将特定列(列名:MarkDown1)的NaN值替换为0 我写的声明是: data1.loc[:,['MarkDown1']] = data1.loc[:,['MarkDown1']].fillna(0) 我的声明提出警告: C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:965: SettingWithCopyWarning: A va

我的dataframe由多个具有NaN值的列组成。我只想将特定列(列名:MarkDown1)的NaN值替换为0

我写的声明是:

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 作为另一个数据帧的视图

结果是:

  • data1是一个单独的数据帧
  • 但它与另一个(源)数据帧共享其数据缓冲区
例如:

  • 我创建了一个名为df的数据框架,其内容如下:

       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

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

  • 为了避免将数据1创建为一个独立的数据帧,使用自己的数据缓冲区创建数据1:

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

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

    Try
    data1['MarkDown1']=data1['MarkDown1'].fillna(0)
    Try,data1.loc[data1['MarkDown1'].isnull(),'MarkDown1']=0@Sociopath还有佐伊。尝试了这些建议,但仍然收到警告。您可以只分配给df:df=df.fillna({'MarkDown1':0})。“把它当作字典传过来好主意,”新的傻瓜补充道,“是的,你是对的。”。感谢您提供的见解。
    data1 = df[df.Xxx < 5].copy()