2016-10-28 1 views
3

Я могу найти количество строк в столбце в кадре данных pandas, которые НЕ следуют шаблону, но не количество строк, которые следуют одному и тому же шаблону!не может суммировать строки, которые соответствуют регулярному выражению в pandas/python

Это работает:

df.report_date.apply(lambda x: (not re.match(r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}', x))).sum()

Это не: удаление «не» не говорит мне, как сопрягать много строк, но вызывает TypeError. Любая идея, почему это так? df.report_date.apply(lambda x: (re.match(r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}', x))).sum()

+1

Не могли бы вы добавить некоторые данные, то есть ввод, который вы используете, и ожидаемый результат? – Cleb

+0

try 'df.report_date.str.match (r '[0-9] {4} - [0-9] {1,2} - [0-9] {1,2}'). Sum()' и 'df.report_date.str.match (r '[0-9] {4} - [0-9] {1,2} - [0-9] {1,2}') .__ neg __(). sum() ' – piRSquared

ответ

2
df = pd.DataFrame(dict(
     report_date=[ 
      '2001-02-04', 
      '2016-11-12', 
      '1-1-1999', 
      '02-28-2012', 
      '1995-09-30' 
     ] 
    )) 
df 

enter image description here


regex = r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}' 
print('does match: {}\ndoesn\'t match: {}'.format(
     df.report_date.str.match(regex).sum(), 
     df.report_date.str.match(regex).__neg__().sum() 
    )) 

does match: 3 
doesn't match: 2 

или

regex = r'[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}' 
df.groupby(df.report_date.str.match(regex)).size() 

report_date 
False 2 
True  3 
dtype: int64 
2

Проблема заключается в том й в функции match не возвращает True, когда он совпадает, он возвращает объект соответствия. Pandas не может добавить этот объект совпадения, потому что это не целочисленное значение. Причина, по которой вы получаете сумму, когда используете «нет», состоит в том, что она возвращает логическое значение True, которое pandas может суммировать значение True и возвращать число.

+0

Одним из способов обращения является преобразование их в логические значения, такие как' df.report_date.apply (lambda x: bool ((re.match (r '[0-9] {4} - [0-9 ] {1,2} - [0-9] {1,2} ', x)))). Sum() ', которые затем могут быть применимы к обоим случаям. –

Смежные вопросы