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

Localizando tabela por data de criação com SQL Server ou MySQL
08/08/2016SQL

Localizando tabela por data de criação com SQL Server ou MySQL

Uma dica rápida para quem trabalha com SQL Server ou MySQL e deseja localizar tabelas por data de criação

Saiba mais...
Criando um log utilizando gatilhos no SQL
05/06/2022SQL

Criando um log utilizando gatilhos no SQL

Um exemplo de como registrar alterações em tabelas usando triggers no SQL

Saiba mais...

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