Python 每隔一行用带有特殊条件的0替换空值

Python 每隔一行用带有特殊条件的0替换空值,python,pandas,Python,Pandas,这是数据集的以下子集: A B C D R sentence ADR1 ADR2 112 135 21 EffexorXR.21 1 lack of good feeling. good feeling 113 135 21 EffexorXR.21 1 1 115 136 21 Eff

这是数据集的以下子集:

A  B    C         D         R        sentence              ADR1         ADR2     
112 135 21  EffexorXR.21    1    lack of good feeling.     good        feeling
113 135 21  EffexorXR.21    1                               1
115 136 21  EffexorXR.21    2    Feel disconnected        disconnected   feel    
116 136 21  EffexorXR.21    2                                             0
118 142 22  EffexorXR.22    1    Weight gain               gain         
119 142 22  EffexorXR.22    1                                1             
在列ADR1和ADR2中,对于每个单词,行中应该有1或0。如果缺少该值,我需要将其替换为“0”。这是输出:

A  B    C         D         R        sentence              ADR1         ADR2     
112 135 21  EffexorXR.21    1    lack of good feeling.     good        feeling
113 135 21  EffexorXR.21    1                               1             0
115 136 21  EffexorXR.21    2    Feel disconnected        disconnected   feel    
116 136 21  EffexorXR.21    2                                 0            0
118 142 22  EffexorXR.22    1    Weight gain               gain         
119 142 22  EffexorXR.22    1                                1    
我试过了

df[ADR1].fillna(0, inplace=True) and df[ADR2].fillna(0, inplace=True)
但是这段代码生成了下面的df,这是不需要的

 A  B    C         D         R        sentence              ADR1         ADR2     
112 135 21  EffexorXR.21    1    lack of good feeling.     good        feeling
    113 135 21  EffexorXR.21    1                               1        0
    115 136 21  EffexorXR.21    2    Feel disconnected        disconnected   feel                                                                 0
    116 136 21  EffexorXR.21    2                                             0
    118 142 22  EffexorXR.22    1    Weight gain               gain           0
    119 142 22  EffexorXR.22    1                                1            0 
您可以使用允许一次每隔一行处理一次数据。比如:

代码: 测试代码: 结果: 您可以使用允许一次每隔一行处理一次数据。比如:

代码: 测试代码: 结果:
您可以尝试的另一种方法是对每个
通过
数据帧的
进行
迭代
,检查并检查下一个值是否为空,前提是第一个值不为空,然后将该值更新为
0

col_list = ['ADR1', 'ADR2'] # columns to check
for column in col_list: # for each column go through each rows
    # however the step size is 2 at a time since current and next is checked
     for i in range(0, df.shape[0]-1, 2): 
        first_val = df.loc[i][column]
        next_val = df.loc[i+1][column]
        # check if given current not empty, is next empty
        if not first_val == '' and next_val  == '':
            df.loc[i+1, column] = 0 # update the value

您可以尝试的另一种方法是对每个
通过
数据帧的
进行
迭代
,检查并检查下一个值是否为空,前提是第一个值不为空,然后将该值更新为
0

col_list = ['ADR1', 'ADR2'] # columns to check
for column in col_list: # for each column go through each rows
    # however the step size is 2 at a time since current and next is checked
     for i in range(0, df.shape[0]-1, 2): 
        first_val = df.loc[i][column]
        next_val = df.loc[i+1][column]
        # check if given current not empty, is next empty
        if not first_val == '' and next_val  == '':
            df.loc[i+1, column] = 0 # update the value


@开源,最后一行只有一个单词,下面有一个。最后一行的ADR2为空,因此该行也为空。我后来意识到了这一点,删除了我之前的评论,谢谢,请向我们展示您的尝试。这是一个获取特定程序编码问题帮助的地方。@开源,最后一行只有一个单词,下面有一个单词。最后一行的ADR2为空,因此该行也为空。我后来意识到了这一点,删除了我之前的评论,谢谢,请向我们展示您的尝试。这是一个获取有关特定程序编码问题帮助的地方。谢谢。如果ADR有两个以上的列,我只需要将其添加到['ADR1','ADR2']的列表中,代码的其他部分不会改变。是吗?试试看。如果复制并粘贴测试代码下的部分,则该部分是独立的。重命名测试数据中的列,然后尝试您建议的更改,看看它是否仍然有效。我复制了您的代码,但它不起作用。我的数据框只有两列ADR1和ADR2,有什么建议吗?我需要的不仅仅是一个简单的数据框,它不起作用。它不做什么?是否有任何地方可以上传我的文档子集,您可以访问它?谢谢。如果ADR有两个以上的列,我只需要将其添加到['ADR1','ADR2']的列表中,代码的其他部分不会改变。是吗?试试看。如果复制并粘贴测试代码下的部分,则该部分是独立的。重命名测试数据中的列,然后尝试您建议的更改,看看它是否仍然有效。我复制了您的代码,但它不起作用。我的数据框只有两列ADR1和ADR2,有什么建议吗?我需要的不仅仅是一个简单的数据框,它不起作用。它没有什么作用?是否有任何地方可以上载文档的子集,您可以访问它?它有以下错误:KeyError:“标签[2]不在[索引]中”,您知道为什么吗?@Mary不确定,我没有收到任何错误。它在哪一行给出了错误?你能检查一下用
str(column)
替换
column
是否有效吗?是的,它解决了。请你回答这个问题:@Mary好极了!您的意思是添加
str(列)
帮助还是找到了不同的解决方案?(只是好奇)我将尝试研究其他问题。是的,这是其他问题的链接:它有以下错误:KeyError:“标签[2]不在[索引]中”,你知道为什么吗?@Mary不确定,我没有收到任何错误。它在哪一行给出了错误?你能检查一下用
str(column)
替换
column
是否有效吗?是的,它解决了。请你回答这个问题:@Mary好极了!您的意思是添加
str(列)
帮助还是找到了不同的解决方案?(只是好奇)我将尝试研究其他问题。是的,这是其他问题的链接:
     A    B   C             D  R              sentence          ADR1     ADR2
0  112  135  21  EffexorXR.21  1  lack of good feeling          good  feeling
1  113  135  21  EffexorXR.21  1                                   1         
2  115  136  21  EffexorXR.21  2     Feel disconnected  disconnected     feel
3  116  136  21  EffexorXR.21  2                                            0
4  118  142  22  EffexorXR.22  1           Weight gain          gain         
5  119  142  22  EffexorXR.22  1                                   1         

     A    B   C             D  R              sentence          ADR1     ADR2
0  112  135  21  EffexorXR.21  1  lack of good feeling          good  feeling
1  113  135  21  EffexorXR.21  1                                   1        0
2  115  136  21  EffexorXR.21  2     Feel disconnected  disconnected     feel
3  116  136  21  EffexorXR.21  2                                   0        0
4  118  142  22  EffexorXR.22  1           Weight gain          gain         
5  119  142  22  EffexorXR.22  1                                   1         
col_list = ['ADR1', 'ADR2'] # columns to check
for column in col_list: # for each column go through each rows
    # however the step size is 2 at a time since current and next is checked
     for i in range(0, df.shape[0]-1, 2): 
        first_val = df.loc[i][column]
        next_val = df.loc[i+1][column]
        # check if given current not empty, is next empty
        if not first_val == '' and next_val  == '':
            df.loc[i+1, column] = 0 # update the value