SQL vs Pandas - Manipulando strings

SQL vs Pandas - Manipulando strings

Neste artigo vamos ver como podemos manipular strings utilizando o Pandas. Vamos comparar como isto é feito no SQL antes de ver a forma como o Pandas obtem o mesmo resultado.

O que você vai aprender neste artigo?

* Retornando parte de uma string a partir da esquerda

* Retornando parte de uma string a partir da direita

* Extraindo parte de uma string a partir de qualquer posição

* Retornar parte de uma string antes de um determinado caractere.

* Retornar parte de uma string depois de um determinado caractere.

 

Os dados de testes que serão utilizados no SQL serão os seguintes

 

CREATE TABLE minha_tabela  (

    campo varchar(255),

);

INSERT INTO minha_tabela (campo) VALUES ("KGW-7688");

INSERT INTO minha_tabela (campo) VALUES ("NEZ-0398");

INSERT INTO minha_tabela (campo) VALUES ("MZN-7217");

 

No Pandas a cada exemplo será mostrado como criar o dataset de testes

 

Retornando parte de uma string a partir da esquerda

 

No SQL utilizamos a função LEFT para retornar parte de um campo a partir de uma esquerda. Esta função recebe dois parâmetros, o primeiro é o campo que vamos utilizar e o segundo é a quantidade de caracteres a ser retornado

 

SELECT LEFT(campo, 3) FROM minha_tabela

 

Neste exemplo, retornamos os 3 primeiros caracteres do campo.

No Pandas utilizamos o método str no campo desejado.

 

import pandas as pd

data = {"campo": ["KGW-7688","NEZ-0398","MZN-7217"]}

df = pd.DataFrame(data, columns= ["campo"])

esquerda = df["campo"].str[:3]

print (esquerda)

 

Retornando parte de uma string a partir da direita

 

Da mesma forma que temos uma função LEFT, no SQL temos uma função chamada RIGHT, que também recebe dois parâmetros

 

SELECT RIGHT(campo, 4) FROM minha_tabela

 

Neste exemplo, retornamos os 4 últimos caracteres do campo.

No Pandas resolvemos isso utilizamos o método str no campo desejado com um valor negativo.

 

import pandas as pd

data = {"campo": ["KGW-7688","NEZ-0398","MZN-7217"]}

df = pd.DataFrame(data, columns= ["campo"])

direita = df["campo"].str[-4:]

print (direita)

 

Extraindo parte de uma string

 

Sabemos que nem sempre o que precisamos está no começo ou no fim do banco, mas a partir de uma posição específica. No SQL temos o SUBSTRING

 

SELECT SUBSTRING(campo1, 2, 5) from minha_tabela

 

Seus três parâmetros são o campo, a posição inicial e a posição final. 

No Pandas continuamos utilizado o str

 

import pandas as pd

data = {"campo": ["KGW-7688","NEZ-0398","MZN-7217"]}

df = pd.DataFrame(data, columns= ["campo"])

resultado = df["campo"].str[2:5]

print (resultado)

 

Retornar parte de uma string antes de um determinado caractere

 

É comum que seja necessário retornar parte do campo a partir de uma certa posição. Em nosso exemplo, os dados tem o mesmo tamanho, então se eu quiser retornar os dados a partir do traço seria muito mais fácil usar o metodo LEFT e pegar os três primeiros caracteres. Mas em exemplos reais pode não ser tão simples. No exemplo a seguir vamos ver como retornar dados antes do traço

 

SQL SERVER

SELECT SUBSTRING(campo, 0, charindex("-", campo, 0)) FROM minha_tabela

MYSQL

SELECT SUBSTRING_INDEX(campo,"-",1) FROM minha_tabela

 

Neste exemplo quando trabalhamos com o SQL SERVER utilizamos a função SUBSTRING junto com a função CHARINDEX. A função CHARINDEX retorna a posição da primeira ocorrência do caractere desejado. No MySQL podemos usar a função SUBSTRING_INDEX.

No Pandas vamos precisar usar algo junto com o str, que é o split. O split vai servir para quebrar o conteúdo do campo num array, com base no caractere informado. Transformado num array, bastará pegar a primeira posição.

 

import pandas as pd

data = {"campo": ["KGW-7688","NEZ-0398","MZN-7217"]}

df = pd.DataFrame(data, columns= ["campo"])

resultado = df["campo"].str.split("-").str[0]

print (resultado)

 

Retornar parte de uma string depois de um determinado caractere

 

Faremos agora o exemplo contrário. Desejamos retornar todo o campo após o traço.

 

SQL SERVER

SELECT SUBSTRING(campo, CHARINDEX("-", campo) + 1, LEN(campo)) FROM minha_tabela

MYSQL

SELECT SUBSTRING_INDEX(campo,"-",-1) FROM minha_tabela

 

No Pandas é o mesmo processo anterior, a diferença é que vamos retornar a segunda posição do array

 

import pandas as pd

data = {"campo": ["KGW-7688","NEZ-0398","MZN-7217"]}

df = pd.DataFrame(data, columns= ["campo"])

resultado = df["campo"].str.split("-").str[1]

print (resultado)

 

Outros conteudos que podem ser de seu interesse

SQL vs Pandas - Criando um ranking
28/04/2024SQL

SQL vs Pandas - Criando um ranking

Veja as diferenças na criação de um ranking utilizando Pandas e SQL

Saiba mais...
Localizar colunas por nome ou tipo de dados no SQL
23/07/2023SQL

Localizar colunas por nome ou tipo de dados no SQL

Descubra como localizar uma coluna por nome ou tipo de dados em qualquer tabela de seu banco de dados

Saiba mais...

Conteúdo sobre banco de dados sem complicação!