【问题标题】:How to ignore nulls while doing matching in python?在python中进行匹配时如何忽略空值?
【发布时间】:2021-03-24 12:20:03
【问题描述】:

我有一个数据框,我正在使用正则表达式来检查列的数据模式,同时执行此操作时其中有空值。由于空值,它能够匹配。我不想放弃它们,或者用其他值替换它。我想忽略它,尽管我尝试获取错误或将 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 条件,但最终得到相同的输出。我们可以忽略空值吗?

【问题讨论】:

  • 我在您的数据中没有看到任何空值
  • @MonkeyZeus 哎呀!我忘了添加它们。我已经将它与例外输出一起编辑了

标签: python regex null python-re


【解决方案1】:

为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-10
    • 2019-05-07
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    相关资源
    最近更新 更多