Отфильтруйте все строки, которые не содержат букв (альфа) в «пандах» - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь отфильтровать pandas фрейм данных, используя regular expressions. Я хочу удалить те строки, которые не содержат букв. Например:

Col A.
50000
$927848
dog
cat 583
rabbit 444

Мои желаемые результаты:

Col A.
dog
cat 583
rabbit 444

Я пытался решить эту проблему безуспешно с параметрами фильтра regex и pandas. Смотри удар. Я специально сталкиваюсь с проблемами, когда пытаюсь объединить два условия для фильтра. Как мне этого добиться?

Вариант 1:

df['Col A.'] = ~df['Col A.'].filter(regex='\d+')

Вариант 2

df['Col A.'] = df['Col A.'].filter(regex=\w+)

Вариант 3

from string import digits, letters
df['Col A.'] = (df['Col A.'].filter(regex='|'.join(letters)))

ИЛИ

df['Col A.'] = ~(df['Col A.'].filter(regex='|'.join(digits)))

ИЛИ

df['Col A.'] = df[~(df['Col A.'].filter(regex='|'.join(digits))) & (df['Col A.'].filter(regex='|'.join(letters)))]

Ответы [ 4 ]

0 голосов
/ 02 мая 2018

df['Col A.'].str.contains(r'^\d+$', na=True) # если строка содержит только цифры или если int / float, то NaN преобразуется в True

Например: [50000, '927848 $,' собака ',' кошка 583 ',' кролик 444 ',' 3 e 3 ',' e 3 ',' 33 ',' 3 e '] дам : [Правда, Ложь, Ложь, Ложь, Ложь, Ложь, Ложь, Правда, Ложь]

0 голосов
/ 02 мая 2018

Вы можете использовать ^.*[a-zA-Z].*$

https://regex101.com/r/b84ji1/1

Детали

^: начало строки

.*: соответствует любому символу

[a-zA-Z]: совпадающие буквы

$: конец строки

0 голосов
/ 02 мая 2018

Я думаю, вам нужно str.contains для фильтрации значений, содержащих буквы, с помощью boolean indexing:

df =  df[df['Col A.'].str.contains('[A-Za-z]')]
print (df)
       Col A.
2         dog
3     cat 583
4  rabbit 444

Если есть некоторые значения NaN s, вы можете передать параметр:

df = df[df['Col A.'].str.contains('[A-Za-z]', na=False)]    
print (df)
       Col A.
3         dog
4     cat 583
5  rabbit 444
0 голосов
/ 02 мая 2018

Вы пробовали:

df['Col A.'].filter(regex=r'\D')  # Keeps only if there's a non-digit character

или

df['Col A.'].filter(regex=r'[A-Za-z]')  # Keeps only if there's a letter (alpha)

или

df['Col A.'].filter(regex=r'[^\W\d_]')  # More info in the link below...

Объяснение: https://stackoverflow.com/a/2039476/8933502

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...