import pandas as pd
dados = {
"Código": [1623,5124,4785,5251,1578,9684,5187, 111, 222, 333, 444, 555 ],
"Dimensões":["10 15 7", "15 7 8", "20 15 8",
"50 70 22", "c10 l20", "50 10 2",
"75 20 10", "10 cl20", "1c0 l20", "111 212", "111 22 33", "11 22 33 44"],
}
# Criar o DataFrame
df = pd.DataFrame( dados )
# Criar uma TABELA VERDADE para selecionar
# as linhas que contem letras na coluna 'Dimensões'
com_letras = df['Dimensões'].str.contains(r'[A-Za-z]')
print( "# tabela verdade de linhas que contem letras na coluna 'Dimensões':" )
print( com_letras )
print( "\n")
print( "# df de linhas COM letras na coluna 'Dimensões':")
print( df[ com_letras ] )
print( "\n")
# Criar uma TABELA VERDADE para selecionar
# as linhas não tem 2 espaços na coluna 'Dimensões':
dif_2espacos = df['Dimensões'].str.count(' ') != 2
print( "# tabela verdade de linhas não tem 2 espaços na coluna 'Dimensões':")
print(dif_2espacos)
print( "\n")
print( "# df de linhas não tem 2 espaços na coluna 'Dimensões':")
print(df[ dif_2espacos ])
print( "\n")
# Agora você pode utilizar bitwise `~` (NOT)
# para negar uma TABELA VERDADE e dessa forma
# transformar quem é TRUE em FALSE e vice-versa
# e depois bitwise `&` (AND) onde ambas tabelas
# sejam verdadeiras, ou seja:
# sem_letras = ~com_letras
# tem_2espacos = ~dif_2espacos
# sem_letras_E_tem_2espacos = sem_letras & tem_2espacos
# df = df[ sem_letras_E_tem_2espacos ].copy()
df = df[ ~tem_letras & ~dif_2espacos ].copy()
print("# df de linhas ( SEM letras AND COM 2 espacos ) na coluna 'Dimensões' :")
print(df)
aW1wb3J0IHBhbmRhcyBhcyBwZAoKZGFkb3MgPSB7IAoJIkPDs2RpZ28iOiBbMTYyMyw1MTI0LDQ3ODUsNTI1MSwxNTc4LDk2ODQsNTE4NywgMTExLCAyMjIsIDMzMywgNDQ0LCA1NTUgXSwKCSJEaW1lbnPDtWVzIjpbIjEwIDE1IDciLCAiMTUgNyA4IiwgIjIwIDE1IDgiLCAKCQkJCSI1MCA3MCAyMiIsICJjMTAgbDIwIiwgIjUwIDEwIDIiLAoJCQkJIjc1IDIwIDEwIiwgIjEwIGNsMjAiLCAiMWMwIGwyMCIsICIxMTEgMjEyIiwgIjExMSAyMiAzMyIsICIxMSAyMiAzMyA0NCJdLAp9CgojIENyaWFyIG8gRGF0YUZyYW1lCmRmID0gcGQuRGF0YUZyYW1lKCBkYWRvcyApCgojIENyaWFyIHVtYSBUQUJFTEEgVkVSREFERSBwYXJhIHNlbGVjaW9uYXIgCiMgYXMgbGluaGFzIHF1ZSBjb250ZW0gbGV0cmFzIG5hIGNvbHVuYSAnRGltZW5zw7VlcycKY29tX2xldHJhcyA9IGRmWydEaW1lbnPDtWVzJ10uc3RyLmNvbnRhaW5zKHInW0EtWmEtel0nKQoKcHJpbnQoICIjIHRhYmVsYSB2ZXJkYWRlIGRlIGxpbmhhcyBxdWUgY29udGVtIGxldHJhcyBuYSBjb2x1bmEgJ0RpbWVuc8O1ZXMnOiIgKQpwcmludCggY29tX2xldHJhcyApCnByaW50KCAiXG4iKQoKCnByaW50KCAiIyBkZiBkZSBsaW5oYXMgQ09NIGxldHJhcyBuYSBjb2x1bmEgJ0RpbWVuc8O1ZXMnOiIpCnByaW50KCBkZlsgY29tX2xldHJhcyBdICkKcHJpbnQoICJcbiIpCgoKIyBDcmlhciB1bWEgVEFCRUxBIFZFUkRBREUgcGFyYSBzZWxlY2lvbmFyCiMgYXMgbGluaGFzIG7Do28gdGVtIDIgZXNwYcOnb3MgbmEgY29sdW5hICdEaW1lbnPDtWVzJzoKZGlmXzJlc3BhY29zID0gZGZbJ0RpbWVuc8O1ZXMnXS5zdHIuY291bnQoJyAnKSAhPSAyCgpwcmludCggIiMgdGFiZWxhIHZlcmRhZGUgZGUgbGluaGFzIG7Do28gdGVtIDIgZXNwYcOnb3MgbmEgY29sdW5hICdEaW1lbnPDtWVzJzoiKQpwcmludChkaWZfMmVzcGFjb3MpCnByaW50KCAiXG4iKQoKCnByaW50KCAiIyBkZiBkZSBsaW5oYXMgbsOjbyB0ZW0gMiBlc3Bhw6dvcyBuYSBjb2x1bmEgJ0RpbWVuc8O1ZXMnOiIpCnByaW50KGRmWyBkaWZfMmVzcGFjb3MgXSkKcHJpbnQoICJcbiIpCgoKIyBBZ29yYSB2b2PDqiBwb2RlIHV0aWxpemFyIGJpdHdpc2UgYH5gIChOT1QpCiMgcGFyYSBuZWdhciB1bWEgVEFCRUxBIFZFUkRBREUgZSBkZXNzYSBmb3JtYQojIHRyYW5zZm9ybWFyIHF1ZW0gw6kgVFJVRSBlbSBGQUxTRSBlIHZpY2UtdmVyc2EKIyBlIGRlcG9pcyBiaXR3aXNlIGAmYCAoQU5EKSBvbmRlIGFtYmFzIHRhYmVsYXMgCiMgc2VqYW0gdmVyZGFkZWlyYXMsIG91IHNlamE6CiMgc2VtX2xldHJhcyA9IH5jb21fbGV0cmFzCiMgdGVtXzJlc3BhY29zID0gfmRpZl8yZXNwYWNvcwojIHNlbV9sZXRyYXNfRV90ZW1fMmVzcGFjb3MgPSBzZW1fbGV0cmFzICYgdGVtXzJlc3BhY29zCiMgZGYgPSBkZlsgc2VtX2xldHJhc19FX3RlbV8yZXNwYWNvcyBdLmNvcHkoKQpkZiA9IGRmWyB+dGVtX2xldHJhcyAmIH5kaWZfMmVzcGFjb3MgXS5jb3B5KCkKCnByaW50KCIjIGRmIGRlIGxpbmhhcyAoIFNFTSBsZXRyYXMgQU5EIENPTSAyIGVzcGFjb3MgKSBuYSBjb2x1bmEgJ0RpbWVuc8O1ZXMnIDoiKQpwcmludChkZikKCgo=