Как я могу утверждать, что все значения в столбце имеют указанную c длину в pandas? - PullRequest
0 голосов
/ 31 января 2020

Я хочу написать утверждение assert для проверки столбца 'client_id' с указанным c length = 12.

assert kcell[ kcell['client_id'].apply(lambda id: len(id) == 12 ]

или

assert (kcell[ kcell['client_id'].apply(lambda id: len(id) == 12])

Ответы [ 3 ]

2 голосов
/ 31 января 2020

Вместо lambda вы можете напрямую применить функцию len, используя pandas.Series.apply и pandas.Series.all

>>> assert (df.client_id.apply(len) == 12).all(),"Error message"
2 голосов
/ 31 января 2020

Если вы хотите фактическое утверждение, запустите:

assert kcell.client_id.apply(lambda n: len(str(n))).eq(12).all(), 'client_id length always 12'

Обратите внимание, что kcell['client_id'].str.len() == 12 не удастся, если ваш столбец, например, типа int . Мое решение работает для int ot string column.

1 голос
/ 31 января 2020

Я думаю, вам нужно Series.str.len с all для проверки, если все значения столбца имеют длину 12, для общего решения добавлено Series.astype для преобразования в строки:

kcell = pd.DataFrame({'client_id':['012345678912','012345678912']})
print (kcell)
      client_id
0  012345678912
1  012345678912

assert (kcell['client_id'].astype(str).str.len() == 12).all(), 'client_id length is not 12'

kcell = pd.DataFrame({'client_id':['012345678912','012']})
print (kcell)
      client_id
0  012345678912
1           012

assert (kcell['client_id'].astype(str).str.len() == 12).all(), 'client_id length is not 12'

AssertionError: длина client_id не равна 12

...