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