#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. Конечно, но если есть строки, то это не будет числовой столбец. Вы можете открыть новый вопрос и поместить ссылку в комментарии, чтобы я мог взглянуть на него.