Как утверждать, что кадр данных pandas, отфильтрованный по условию, является истинным - PullRequest
0 голосов
/ 18 октября 2018

Итак, у меня есть pytest, проверяющий результаты запроса, который возвращает pandas dataframe.

Я хочу утверждать, что определенный столбец col имеет все значения, которые являются подстрокой данного ввода.

Итак, это ниже дает мне строки (фрейм данных), которые имеют значение col этого столбца, содержащее некоторую входную часть.Как я могу утверждать, что это правда?

assert result_df[result_df['col'].astype(str).str.contains(category)].bool == True 

не работает

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Нашел это.assert result_df[result_df['col'].astype(str).str.contains(category)].bool работает

или assert result_df['col'].astype(str).str.contains(category).all (Спасибо @jezrael за все предложения)

0 голосов
/ 18 октября 2018

Попробуйте:

assert result_df[result_df['col'].astype(str).str.contains(category)].bool.all(axis=None) == True

Для получения дополнительной информации обратитесь к документации pandas: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.all.html

Причина, по которой ваш код не работает, заключается в том, что вы пытаетесь проверить,объект dataframe имеет значение True, но не все значения в нем.

0 голосов
/ 18 октября 2018

Я полагаю, что вам нужно Series.all для проверки, являются ли все значения отфильтрованного Series True с:

assert result_df['col'].astype(str).str.contains(category).all()

Образец :

result_df = pd.DataFrame({
         'col':list('aaabbb')
})

print (result_df)
  col
0   a
1   a
2   a
3   b
4   b
5   b

category = 'b'
assert result_df['col'].astype(str).str.contains(category).all()

AssertionError

Сведения :

print (result_df['col'].astype(str).str.contains(category))
0    False
1    False
2    False
3     True
4     True
5     True
Name: col, dtype: bool

print (result_df['col'].astype(str).str.contains(category).all())
False

category = 'a|b'
assert result_df['col'].astype(str).str.contains(category).all()

print (result_df['col'].astype(str).str.contains(category))

0    True
1    True
2    True
3    True
4    True
5    True
Name: col, dtype: bool

print (result_df['col'].astype(str).str.contains(category).all())
True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...