Поиск любого текста в числовом столбце

#python #pandas #numpy

#python #панды #numpy

Вопрос:

Как найти только текст в столбце B? Можно ли использовать функцию запроса для поиска всех символов в столбце? например, df.query(‘ColB == a-z’)

Col A Col B
1 45
2 abd
3 4
4 7
5 gth
6 4

Ответ №1:

В этом конкретном случае, если вы хотите проверить, содержат ли значения в Col B строках от a до z, вы можете использовать pd.str.contains шаблон регулярных выражений, например:

 df['Col B'].str.contains(r'[a-z]')
 

И если вы хотите выполнить фильтрацию по этим конкретным строкам:

 df[df['Col B'].str.contains(r'[a-z]',na=False)]
 

Вернет:

    Col A Col B
1      2   abd
4      5   gth
 

Ответ №2:

Не могли бы вы попробовать следующее, написанное в соответствии с вашими показанными примерами. Написано и протестировано в версии pandas '0.20.1' .

 import pandas as pd
df[df['ColB'].str.contains(r'^[a-zA-Z] 

Объяснение: используя регулярное выражение здесь, чтобы проверить, содержит ли столбец B фрейма данных алфавиты во всех значениях, только алфавиты, затем выведите эту строку df. df.str.содержит документацию


Комментарии:

1. Осторожно с выводом str.contains() .

2. @CeliusStingher, спасибо за ваш комментарий, не могли бы вы подробнее рассказать об этом, потому что, когда я запускаю это, это сработало для меня с показанными / заданными примерами, спасибо.

3. Это странно, потому .str.contains что возвращает NaN те значения, которые не совпадают. Поэтому я получаю ValueError: Cannot mask with non-boolean array containing NA / NaN values при копировании-вставке вашего кода. Спасибо за ваш ответ!

4. Спасибо, сэр, тогда это, вероятно, связано с версиями! В более новых версиях он возвращается NaN , и вы можете использовать параметр na=False для учета этого. Вам тоже счастливого обучения и счастливого Рождества!

5. Конечно, но если есть строки, то это не будет числовой столбец. Вы можете открыть новый вопрос и поместить ссылку в комментарии, чтобы я мог взглянуть на него.

)]
Объяснение: используя регулярное выражение здесь, чтобы проверить, содержит ли столбец B фрейма данных алфавиты во всех значениях, только алфавиты, затем выведите эту строку df. df.str.содержит документацию

Комментарии:

1. Осторожно с выводом str.contains() .

2. @CeliusStingher, спасибо за ваш комментарий, не могли бы вы подробнее рассказать об этом, потому что, когда я запускаю это, это сработало для меня с показанными / заданными примерами, спасибо.

3. Это странно, потому .str.contains что возвращает NaN те значения, которые не совпадают. Поэтому я получаю ValueError: Cannot mask with non-boolean array containing NA / NaN values при копировании-вставке вашего кода. Спасибо за ваш ответ!

4. Спасибо, сэр, тогда это, вероятно, связано с версиями! В более новых версиях он возвращается NaN , и вы можете использовать параметр na=False для учета этого. Вам тоже счастливого обучения и счастливого Рождества!

5. Конечно, но если есть строки, то это не будет числовой столбец. Вы можете открыть новый вопрос и поместить ссылку в комментарии, чтобы я мог взглянуть на него.