将某个字段中的某些值替换为另一个

时间:2020-04-20 21:39:06

标签: pandas

我想将某个领域的一些勇士换成另一个。例如: 假设我有一个 pandas.DataFrame 对象,其标识符为 df (是的,非常原始),它具有多个列,但是其中一些是相关的,不能为空。

我注意到一些值设置在另一个字段中。假设 field1 是相关字段,而 field2 不是相关字段。我有一千个寄存器,当我获得新数据时,它每周都在增加,由于我喜欢使事情自动化,因此我首先检查以下可能的值:

idx = df[df.field1.isna() & df.field2.notna()].index

然后我尝试替换它们:

df.loc[idx, ['field1']] = df.loc[idx, ['field2']]

但是当我看到结果时,什么都没有改变……为什么?我以这种方式用单个值代替,但是如果它们不同,我将无法再使用。

df.loc[idx, ['field1']] = "Not empty any longer"  # This will work

我不知道如何以一种……好的方式实现这一目标?我的意思是,我不想手动检查它,如果它们只有50岁也没关系,我必须在其他领域也做同样的事情,我可能会得到更多类似的东西(我会)。

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试以下操作:<!DOCTYPE html> <html> <head> <title></title> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link href="https://fonts.googleapis.com/css?family=Montserrat"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <link rel="stylesheet" type="text/css" href="style.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <style> .PinDiv{ display: none; } </style> </head> <body> <div> <div> <section> <figure> <i class="HoverPin" onmouseover="$('#PinDiv1').css('display','block');" onmouseout="$('.PinDiv:not(#PinDiv1)').css('display','none');">1</i> <i class="HoverPin" onmouseover="$('#PinDiv2').css('display','block');" onmouseout="$('.PinDiv:not(#PinDiv2)').css('display','none');">2</i> <i class="HoverPin" onmouseover="$('#PinDiv3').css('display','block');" onmouseout="$('.PinDiv:not(#PinDiv3)').css('display','none');">3</i> <i class="HoverPin" onmouseover="$('#PinDiv4').css('display','block');" onmouseout="$('.PinDiv:not(#PinDiv4)').css('display','none');">4</i> </figure> </section> </div> <div id="PinDiv1" class="PinDiv"> <h3>Text item 1</h3> </div> <div id="PinDiv2" class="PinDiv"> <h3>Text item 2</h3> </div> <div id="PinDiv3" class="PinDiv"> <h3>Text item 3</h3> </div> <div id="PinDiv4" class="PinDiv"> <h3>Text item 4</h3> </div> </div> </body> </html>

示例:

df.loc[idx, ['field1']] = df.loc[idx, ['field2']].values

原始数据框:

# The None in 'field1' should be replaced by the 'field2' value
df = pd.DataFrame({'field1':[1,2,3,None,5], 'field2':[6,7,8,8,None]})
idx = df[df.field1.isna() & df.field2.notna()].index
df.loc[idx, ['field1']] = df.loc[idx, ['field2']].values

修改后的df:

df
   field1  field2
0     1.0     6.0
1     2.0     7.0
2     3.0     8.0
3     NaN     8.0
4     5.0     NaN