熊猫:.loc未将一个数据帧的行分配给另一数据帧的切片的行

时间:2019-06-11 02:40:20

标签: python pandas dataframe

我有一个如下所示的数据框,我使用NDCSPart_df截取了一个名为NDCSPart_df = Register_df.iloc[:, :17]的切片

Register_df

NDCSPart_df需要由列长度相同但值不同,行数相同或更多的最新数据框NOTES_df更新。

我使用“ MainDocID”比较NDCSPart_dfNOTES_df的行以识别任何更改,如果有任何更改,将为NDCSPart_df中的行分配值。 NOTES_df中具有相同“ MainDocID”的行。 enter image description here

for i in ChangedDocumentIDDict.keys():    
    NDCSPart_df.loc[NDCSPart_df["MainDocID"]==i,:].update(NOTES_df.loc[NOTES_df["MainDocID"]==i,:])

这会给我以下警告,

  

C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py:5516:   SettingWithCopyWarning:试图在一个副本上设置一个值   从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] =   值代替

     

请参阅文档中的警告:   http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy   self [col] = expressions.where(遮罩,此,那)

同样,我尝试了以下代码:

for i in ChangedDocumentIDDict.keys():
        NDCSPart_df.loc[NDCSPart_df["MainDocID"]==i,:]= NOTES_df.loc[NOTES_df["MainDocID"]==i,:]

有类似警告:

  

C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ core \ indexing.py:190:   SettingWithCopyWarning:试图在一个副本上设置一个值   从DataFrame切片

     

请参阅文档中的警告:   http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy   self._setitem_with_indexer(索引器,值)   C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ ipykernel_launcher.py:3:   SettingWithCopyWarning:试图在一个副本上设置一个值   从DataFrame切片

     

请参阅文档中的警告:   http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy   这与ipykernel软件包分开,因此我们可以避免这样做   直到进口

但是我担心的是,分配失败,并且填充了NaN个值,如第二个快照所示,该值应具有针对NOTES_df的索引78的行的值。

enter image description here

我正在使用Python 3.7.3,pandas 0.24.2,并且我尝试了Python 3.6.6,pandas 0.23.4,结果相同。

我的问题是:

  1. 我如何错误使用.loc?
  2. 如何将NOTES_df的行分配给NDCSPart_df

1 个答案:

答案 0 :(得分:1)

这更像是条件过滤器后两个df的index不同,因此我们需要再多添加info Variables set via logging commands are not persistent between agent

.values