如何在 python 中进行匹配时忽略空值?

How to ignore nulls while doing matching in python?

我有一个数据框,我在执行此操作时使用正则表达式检查列数据的模式,其中有空值。由于空值,它能够匹配。我不想删除它们,也不想用其他值替换它。我想忽略它,尽管我尝试获取错误或获取 NONE 作为输出。我们如何在进行匹配时忽略空值?

代码:

df =
  a        b    c
0 rt-0000  abc  1
1          vb   2
2 rt-1234  abc  3
3          op   4
4 rt-123   oip  5

format = 'rt-\d\d\d\d'
if df['a'].isnull().any():
          continue
          correct_df = df[df[key].str.match(format )]
          wrong_df = df[~df[key].str.match(format )]

输出给出:NONE

当我尝试不忽略空值时出现错误:'Cannot mask Naan/Null values'

异常输出:

corrected_df:
      a        b    c
    0 rt-0000  abc  1
    1          vb   2
    2 rt-1234  abc  3
    3          op   4
wrong_df:
4 rt-123   oip  5

我尝试使用不同的 if 条件,但最终得到相同的输出。我们可以忽略空值吗?

对于:

df = pd.DataFrame({'a':['rt-0000',np.nan,'rt-1234',np.nan,'rt-123'],
                  'b':['abc','vb','abc','op','oip'],
                  'c':[1,2,3,4,5]})

         a    b  c
0  rt-0000  abc  1
1      NaN   vb  2
2  rt-1234  abc  3
3      NaN   op  4
4   rt-123  oip  5

您可以简单地使用:

correct_df = df[df.a.str.match(format, na=True)]
wrong_df = df[~df.a.str.match(format, na=True)]

这给出了你的结果:

         a    b  c
0  rt-0000  abc  1
1      NaN   vb  2
2  rt-1234  abc  3
3      NaN   op  4

        a    b  c
4  rt-123  oip  5