10 Pandas PUC Flashcards
import pandas as pd
padrão da comunidade, assim como np para NumPy
idades = [68, 23, 17, 39, 25, 58] idades s = pd.Series(idades) s ==> 0 68 1 23 2 17 3 39 4 25 5 58 dtype: int64
s[3]
==>
39
s = pd.Series([68, 23, 17, 39, 25, 58]) s ==> 0 68 1 23 2 17 3 39 4 25 5 58 dtype: int64
igual anterior mesmo
pessoas = ['Eni', 'Bia', 'Flávio', 'Carlos', 'Dedé', 'Abigail'] idades = [68, 23, 17, 39, 25, 58] s1 = pd.Series(idades, pessoas) s1 ==> Eni 68 Bia 23 Flávio 17 Carlos 39 Dedé 25 Abigail 58 dtype: int64
idades são dados, pessoas são rótulos
s1[‘Carlos’]
==>
39
s1[39]
==>
ERROR
s2 = pd.Series(index = idades, data = pessoas)
s2[39]
==>
‘Carlos’
padrão é primeiro dados e depois index/rótulos
nomes = ("Mnas Gerais", "Amazonas", "Maranhão", "Goiás", "Santa Catarina") siglas = ("MG", "AM", "MA", "GO", "SC") estados = pd.Series(nomes, siglas) estados ==> MG Mnas Gerais AM Amazonas MA Maranhão GO Goiás SC Santa Catarina dtype: object
estados["MG"] = "Minas Gerais" estados ==> MG Minas Gerais AM Amazonas MA Maranhão GO Goiás SC Santa Catarina dtype: object
precos = np.array([25, 22, 18.5, 4.75, 3, 4.5, 2.3])
lanches = np.array([‘X-tudo’, ‘X-Bacon’, ‘Bauru’, ‘Misto-quente’, ‘Pão-de-queijo’, ‘Coxinha’, ‘Pastel’])
cardapio = pd.Series(precos, lanches)
cardápio
==>
X-tudo 25.00 X-Bacon 22.00 Bauru 18.50 Misto-quente 4.75 Pão-de-queijo 3.00 Coxinha 4.50 Pastel 2.30 dtype: float64
dic_estados = {“MG”: “Minas Gerais”, “CE”: “Ceará”, “MT”: “Mato Grosso”, “RR”: “Roraima”}
serie_estados = pd.Series(dic_estados)
serie estados
==>
MG Minas Gerais CE Ceará MT Mato Grosso RR Roraima dtype: object
dic_estados2 = {“MG”: {“Estado”:”Minas Gerais”, “Capital”:”Belo Horizonte”, “População (2014)”:20777672},
“CE”: {“Estado”:”Ceará”, “Capital”:”Fortaleza”, “População (2014)”:8867448},
“MT”: {“Estado”:”Mato Grosso”, “Capital”:”Cuiabá”, “População (2014)”:3236578},
“RR”: {“Estado”:”Roraima”, “Capital”:”Boa Vista”, “População (2014)”:500826},}
serie_estados2 = pd.Series(dic_estados2)
serie_estados2
==>
m
CE {‘Estado’: ‘Ceará’, ‘Capital’: ‘Fortaleza’, ‘P…
MT {‘Estado’: ‘Mato Grosso’, ‘Capital’: ‘Cuiabá’,…
RR {‘Estado’: ‘Roraima’, ‘Capital’: ‘Boa Vista’, …
dtype: object
serie_estados2[“MT”]
==>
{‘Estado’: ‘Mato Grosso’, ‘Capital’: ‘Cuiabá’, ‘População (2014)’: 3236578}
serie_estados2[“RR”][“Capital”]
==>
‘Boa Vista’
Criando Series a partir de arquivos .csv:
O arquivo idades.csv contém as idades de 100 pessoas (apenas 1 coluna)
idadescsv = pd.read_csv("idades.csv") idadescsv.head() ==> Idades 0 55 1 45 2 74 3 18 4 21
# mostra as 5 primeiras linhas de uma Series ou DataFrame, se head(60) mostraria as 60 primeiras linhas # 60 é o limite, se 61, mostra as 5 primeiras e 5 últimas até 61 # se colocar número acima do limite não dá erro, mostra as 5 últimas normalmente
idadescsv[3]
==>
ERROR
type(idadescsv)
==>
pandas.core.frame.DataFrame
idadescsv[‘Idades’][3]
==>
18
# Passando o argumento squeeze = True (por default squeeze = False) # Quando squeeze = True, se os dados estiverem em apenas 1 dimensão, é então retornado uma Series
idadescsv = pd.read_csv("idades.csv", squeeze=True) idadescsv.head() ==> 0 55 1 45 2 74 3 18 4 21 Name: Idades, dtype: int64
idadescsv[3]
==>
18
type(idadescsv)
==>
pandas.core.series.Series
O arquivo idades2.csv contém o nomes e idade de 100 pessoas. A coluna nome será usada como índice.
idadescsv2 = pd.read_csv("idades2.csv", squeeze=True) idadescsv2.head() ==> Nome Idade 0 Agatha 24 1 Alice 27 2 Alícia 18 3 Amanda 18 4 Ana Beatriz 44
type(idadescsv2)
==>
pandas.core.frame.DataFrame
Índice, Dados
idadescsv3 = pd.read_csv("idades2.csv", index_col = 0, squeeze=True) idadescsv3.head() ==> Nome Agatha 24 Alice 27 Alícia 18 Amanda 18 Ana Beatriz 44 Name: Idade, dtype: int64
idadescsv4 = pd.read_csv("idades2.csv", index_col = 1, squeeze=True) idadescsv4.head() ==> Idade 24 Agatha 27 Alice 18 Alícia 18 Amanda 44 Ana Beatriz Name: Nome, dtype: object
idadesxls = pd.read_excel("idades2.xlsx", squeeze=True) idadesxls.head() ==> 0 55 1 45 2 74 3 18 4 21 Name: Idades, dtype: int64
Abre a primeira planilha por padrão
idadesxls2 = pd.read_excel("idades2.xlsx", sheet_name="Planilha2") idadesxls2.head() ==> Nome Idade 0 Agatha 24 1 Alice 27 2 Alícia 18 3 Amanda 18 4 Ana Beatriz 44
type(idadesxls2)
==>
pandas.core.frame.DataFrame
idadesxls3 = pd.read_excel("idades2.xlsx", sheet_name="Planilha2", index_col = 0, squeeze=True) idadesxls3.head() ==> Nome Agatha 24 Alice 27 Alícia 18 Amanda 18 Ana Beatriz 44 Name: Idade, dtype: int64
type(idadesxls3)
==>
pandas.core.series.Series
Métodos do objeto Series: indexação e iteração
Método Descrição Exemplo
at() Acessa o elemento da chave passada por parâmetro s.iat[“chave”]
iat() Acessa o elemento no índice passado por parâmetro s.iat(0)
get() Retorna um valor para a chave passada por parâmetro s.get(2)
loc() Acessa os elementos para as chaves passadas por parâmetro s.loc[“chave1”, “chave2”]
iloc() Acesso via índice s.iloc[0] ou s.iloc[[1,3]]
keys() Retorna o índice (rótulos) de um objeto Series s.keys()
cardápio ==> X-tudo 25.00 X-Bacon 22.00 Bauru 18.50 Misto-quente 4.75 Pão-de-queijo 3.00 Coxinha 4.50 Pastel 2.30 Name: Cardápio, dtype: float64
cardapio. at[“X-tudo”] ==> 25.0
cardapio. iat[0] ==> 25.0
Métodos do objeto Series: indexação e iteração
Método Descrição Exemplo
at() Acessa o elemento da chave passada por parâmetro s.iat[“chave”]
iat() Acessa o elemento no índice passado por parâmetro s.iat(0)
get() Retorna um valor para a chave passada por parâmetro s.get(2)
loc() Acessa os elementos para as chaves passadas por parâmetro s.loc[“chave1”, “chave2”]
iloc() Acesso via índice s.iloc[0] ou s.iloc[[1,3]]
keys() Retorna o índice (rótulos) de um objeto Series s.keys()
cardápio ==> X-tudo 25.00 X-Bacon 22.00 Bauru 18.50 Misto-quente 4.75 Pão-de-queijo 3.00 Coxinha 4.50 Pastel 2.30 Name: Cardápio, dtype: float64
cardapio. at[“X-tudo”] ==> 25.0
cardapio. iat[0] ==> 25.0
cardapio.iat[0] = 25.5
cardapio.get(0) # não permite alterar
==>
25.5
cardapio.loc[["Bauru", "Pastel"]] ==> Bauru 18.5 Pastel 2.3 Name: Cardápio, dtype: float64
cardapio.iloc[[0,2,3]] ==> X-tudo 25.50 Bauru 18.50 Misto-quente 4.75 Name: Cardápio, dtype: float64
cardapio.keys() ==> Index(['X-tudo', 'X-Bacon', 'Bauru', 'Misto-quente', 'Pão-de-queijo', 'Coxinha', 'Pastel'], dtype='object')
Métodos do objetos Series: operações matemáticas e estatísticas
Método Descrição Exemplo
add() Retorna a soma com outra Series ou escalar, elemento por elemento c = a.add(b, fill_value=0)
a = pd.Series([4, 8, 2, 5, 7]) b = pd.Series([1, 2, 3, 4, 5]) c = a.add(b) print(" ",a.values) print("+",b.values) print("="*16) print(c.values) ==> [4 8 2 5 7] \+ [1 2 3 4 5] ================ [ 5 10 5 9 12]
a2 = a.add(3) print(" ",a.values) print("+",3) print("="*16) print(a2.values) ==> [4 8 2 5 7] \+ 3 ================ [ 7 11 5 8 10]
sub() Retorna a subtração com outra Series ou escalar, elemento por elemento c = a.sub(b, fill_value=3)
d = a.sub(b) print(" ",a.values) print("-",b.values) print("="*16) print(d.values) ==> [4 8 2 5 7] - [1 2 3 4 5] ================ [ 3 6 -1 1 2]
mul() Retorna a multiplicação com outra Series ou escalar, elemento por elemento c = a.mul(b, fill_value=1)
e = a.mul(b) print(" ",a.values) print("*",b.values) print("="*16) print(e.values) ==> [4 8 2 5 7] * [1 2 3 4 5] ================ [ 4 16 6 20 35]
div() Retorna a divisão com outra Series ou escalar, elemento por elemento c = a.div(b, fill_value=1)
f = a.div(b) print(" ",a.values) print("/",b.values) print("="*16) print(f.values) ==> [4 8 2 5 7] / [1 2 3 4 5] ================ [4. 4. 0.66666667 1.25 1.4 ]
floordiv() Retorna a divisão inteira com outra Series ou escalar, elemento por elemento c = a.floordiv(b, fill_value=1)
g = a.floordiv(b) print(" ",a.values) print("//",b.values) print("="*16) print(" ",g.values) ==> [4 8 2 5 7] // [1 2 3 4 5] ================ [4 4 0 1 1]
mod() Retorna o resto da divisão com outra Series ou escalar, elemento por elemento c = a.mod(b, fill_value=1)
h = a.mod(b) print(" ",a.values) print("%",b.values) print("="*16) print(" ",h.values) ==> [4 8 2 5 7] % [1 2 3 4 5] ================ [0 0 2 1 2]
pow() Retorna a potenciação com outra Series ou escalar, elemento por elemento c = a.pow(b, fill_value=1)
i = a.pow(b) print(" ",a.values) print("**",b.values) print("="*16) print(" ",i.values) ==> [4 8 2 5 7] ** [1 2 3 4 5] ================ [ 4 64 8 625 16807]
j = a.pow(2) print(" ",a.values) print("**",2) print("="*16) print(" ",j.values) ==> [4 8 2 5 7] ** 2 ================ [16 64 4 25 49]
round() Arredonda os valores de uma Series para uma quantidade determinada de casas decimais s = a.round(2)
a ==> 0 7.745967 1 2.645751 2 6.403124 3 8.717798 4 7.937254 5 7.745967 6 5.385165 7 9.380832 8 5.385165 9 7.681146 dtype: float64
a = a.round(2) ==> 0 7.75 1 2.65 2 6.40 3 8.72 4 7.94 5 7.75 6 5.39 7 9.38 8 5.39 9 7.68 dtype: float64
a = a.round() ==> 0 8.0 1 3.0 2 6.0 3 9.0 4 8.0 5 8.0 6 5.0 7 9.0 8 5.0 9 8.0 dtype: float64
Default é 0
lt() Retorna o resultado da comparação menor que, aplicada elemento por elemento, entre duas Series c = a.lt(b, fill_value=0)
LOWER THAN
a ==> 0 9 1 5 2 0 3 9 4 5 dtype: int32
b ==> 0 7 1 0 2 8 3 8 4 6 dtype: int32
a.lt(b) 0 False 1 False 2 True 3 False 4 True dtype: bool
gt() Retorna o resultado da comparação maior que, aplicada elemento por elemento, entre duas Series c = a.gt(b, fill_value=0) GREATHER THAN
le() Retorna o resultado da comparação menor ou igual, aplicada elemento por elemento, entre duas Series c = a.le(b, fill_value=0) LOWER OR EQUAL THAN
ge() Retorna o resultado da comparação maior ou igual, aplicada elemento por elemento, entre duas Series c = a.ge(b, fill_value=0) GREATER OR EQUAL THAN
ne() Retorna o resultado da comparação não igual a, aplicada elemento por elemento, entre duas Series c = a.ne(b, fill_value=0) NOT EQUAL
eq() Retorna o resultado da comparação igual a, aplicada elemento por elemento, entre duas Series c = a.eq(b, fill_value=0) EQUAL
product() Retorna o produto entre todos os elementos de um objeto Series s.product()
mutiplica todos os elementos de s por eles mesmos e dá um resultado final
sum() Retorna a soma entre todos os elementos de um objeto Series s.sum()
soma todos os elementos de s por eles mesmos e dá um resultado final
abs() Retorna valor absoluto de todos os elementos de um objeto Series s.abs()
absoluto de cada elemento
count() Retorna a quantidade de elementos não nulos s.count()
idadescsv3.count()
==>
100
describe() Gera um relatório com diversas medidas estatísticas como média, percentis, etc… s.describe()
idadescsv3.describe() ==> count 100.000000 mean 35.570000 std 10.766817 min 18.000000 25% 26.750000 50% 34.000000 75% 45.250000 max 55.000000 Name: Idade, dtype: float64
nlargest() Retorna os n maiores elementos s.nlargest(3)
idadescsv3.nlargest(3) ==> Nome Lucas 55 Valentina 54 Lucca 53 Name: Idade, dtype: int64
nsmallest() Retorna os n menores elementos s.nsmallest(5)
idadescsv3.nsmallest(5) ==> Nome Alícia 18 Amanda 18 Bernardo 18 Heloísa 18 Maria Fernanda 18 Name: Idade, dtype: int64
quantile() Retorna o valor de determinado quantil passado por parâmetro s.quantile(0.25)
Percentil 25% etc…
std() Retorna o desvio padrão s.std()
idadescsv3.std()
==>
10.766816773510332
unique() Retorna valores únicos s.unique()
idadescsv3.unique()
==>
array([24, 27, 18, 44, 46, 49, 47, 41, 19, 25, 31, 42, 23, 39, 21, 33, 45,
34, 43, 29, 36, 40, 32, 22, 48, 52, 51, 55, 53, 26, 54],
dtype=int64)
np.sort(idadescsv3.unique()) ==>
array([18, 19, 21, 22, 23, 24, 25, 26, 27, 29, 31, 32, 33, 34, 36, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55],
dtype=int64)
nunique() Retorna a quantidade de elementos únicos s.nunique()
idadescsv3.nunique()
=>
31
SHALLOW COPY
copy() Retorna uma cópia de um objetos Series s.copy() SHALLOW COPY (CÓPIA SUPERFICIAL, SÓ COPIA A REFERÊNCIA)
serie_estados2
0 9 1 5 2 0 3 9 4 5 5 0 6 5 7 4 8 9 9 5 10 5 11 4 12 4 13 3 14 6 dtype: int32
copia = serie_estados2.copy()
copia
0 9 1 5 2 0 3 9 4 5 5 0 6 5 7 4 8 9 9 5 10 5 11 4 12 4 13 3 14 6 dtype: int32
O que modificar em copia modifica também em serie_estados2
DEEP COPY #
import pickle
copia = pickle.loads(pickle.dumps(serie_estados2))
SE MUDAR NA copia NÃO MODIFICA NA serie_estados2
append() Concatena duas ou mais Series s = a.append(b)
a 0 9 1 5 2 0 3 9 4 5 dtype: int32
b 0 2.0 1 5.0 2 NaN 3 0.0 4 3.0 5 NaN 6 6.0 dtype: float64
ab = a.append(b) ab ==> 0 9.0 1 5.0 2 0.0 3 9.0 4 5.0 0 2.0 1 5.0 2 NaN 3 0.0 4 3.0 5 NaN 6 6.0 dtype: float64
ab = a.append(b, ignore_index=True) ab ==> 0 9.0 1 5.0 2 0.0 3 9.0 4 5.0 5 2.0 6 5.0 7 NaN 8 0.0 9 3.0 10 NaN 11 6.0 dtype: float64
DEEP COPY # # CÓPIA DE VERDADE #
import pickle
copia = pickle.loads(pickle.dumps(serie_estados2))
SE MUDAR NA copia NÃO MODIFICA NA serie_estados2
append() Concatena duas ou mais Series s = a.append(b)
a 0 9 1 5 2 0 3 9 4 5 dtype: int32
b 0 2.0 1 5.0 2 NaN 3 0.0 4 3.0 5 NaN 6 6.0 dtype: float64
Tem que conferir pra mudar o index
ab = a.append(b) ab ==> 0 9.0 1 5.0 2 0.0 3 9.0 4 5.0 0 2.0 1 5.0 2 NaN 3 0.0 4 3.0 5 NaN 6 6.0 dtype: float64
ab = a.append(b, ignore_index=True) ab ==> 0 9.0 1 5.0 2 0.0 3 9.0 4 5.0 5 2.0 6 5.0 7 NaN 8 0.0 9 3.0 10 NaN 11 6.0 dtype: float64
replace() Substitui valor da Series por outro passado por parâmetro
ab ==> ab ==> 0 9.0 1 5.0 2 0.0 3 9.0 4 5.0 5 2.0 6 5.0 7 NaN 8 0.0 9 3.0 10 NaN 11 6.0 dtype: float64
c = ab.replace(0, 1) c ==> 0 9.0 1 5.0 2 1.0 3 9.0 4 5.0 5 2.0 6 5.0 7 NaN 8 1.0 9 3.0 10 NaN 11 6.0 dtype: float64
update() Modifica uma série por valores de outra série passada por parâmetro
c ==> 0 9.0 1 5.0 2 1.0 3 9.0 4 5.0 5 2.0 6 5.0 7 NaN 8 1.0 9 3.0 10 NaN 11 6.0 dtype: float64
d = pd.Series([4, 10, 11, 12], index=[9, 7, 10, 4]) d ==> 9 4 7 10 10 11 4 12 dtype: int64
c.update(d) c => 0 9.0 1 5.0 2 1.0 3 9.0 4 12.0 ### 5 2.0 6 5.0 7 10.0 ### 8 1.0 9 4.0 ### 10 11.0 ### 11 6.0 dtype: float64
head() Retorna as n primeiras linhas s.head(n)
default = 5, max é 60, a partir disso retorna 5 primeiras e 5 últimas
idadescsv3.head()
tail() Retorna as n últimas linhas s.tail(n)
default = 5, max é 60, a partir disso retorna 5 primeiras e 5 últimas
idadescsv3.tail()
sample() Retorna uma amostra s.sample()
idadescsv3. sample() # Por default retorna 1 linha de amostra
idadescsv3. sample(5)
where() Retorna uma Series onde valores para os quais a condição é False são substituídos por outro passado por parâmetro s.where(s <= 0, 5)
d = c.where(c > 3, 10) # Troca valores por 10 se a condição for falsa
e = c.where(c <= 3, 0) # Troca valores por 0 se a condição for falsa
print(“c.values”, c.values)
print(“d.values”, d.values)
print(“e.values”, e.values)
==>
c.values [ 9. 5. 0. 9. 5. 2. 5. nan 0. 3. nan 6.]
d.values [ 9. 5. 10. 9. 5. 10. 5. 10. 10. 10. 10. 6.]
e.values [0. 0. 0. 0. 0. 2. 0. 0. 0. 3. 0. 0.]
mask() Retorna uma Series onde valores para os quais a condição é True são substituídos por outro passado por parâmetro s.mask(s > 0, 5)
d = c.mask(c > 3, 10) # Troca valores por 10 se a condição for verdadeira
e = c.mask(c <= 3, 0) # Troca valores por 0 se a condição for verdadeira
print(“c.values”, c.values)
print(“d.values”, d.values)
print(“e.values”, e.values)
==>
c.values [ 9. 5. 0. 9. 5. 2. 5. nan 0. 3. nan 6.]
d.values [10. 10. 0. 10. 10. 2. 10. nan 0. 3. nan 10.]
e.values [ 9. 5. 0. 9. 5. 0. 5. nan 0. 0. nan 6.]
Métodos do objetos Series: manipulação de dados ausentes
Método Descrição Exemplo
isna()
notna()
dropna()
fillna()
isna() Retorna quais valores estão ausentes s.isna()
notna() Retorna quais valores estão presentes s.notna()
dropna() Retorna uma nova Series com valores ausentes removidos s.dropna()
fillna() Substitui valores ausentes por um valor ou usando um método de substituição s.fillna(0)
isna() Retorna quais valores estão ausentes s.isna()
s = pd.Series([2, 5, np.nan, 0, 3, None, 6])
s.isna()
==>
0 False 1 False 2 True 3 False 4 False 5 True 6 False dtype: bool
notna() Retorna quais valores estão presentes s.notna()
s = pd.Series([2, 5, np.nan, 0, 3, None, 6])
s.notna()
==>
0 True 1 True 2 False 3 True 4 True 5 False 6 True dtype: bool
dropna() Retorna uma nova Series com valores ausentes removidos s.dropna()
s = pd.Series([2, 5, np.nan, 0, 3, None, 6]) s1 = s.dropna() s1 ==> 0 2.0 1 5.0 3 0.0 4 3.0 6 6.0 dtype: float64
s.dropna(inplace=True) s ==> 0 2.0 1 5.0 3 0.0 4 3.0 6 6.0 dtype: float64
(modifica a série original)
fillna() Substitui valores ausentes por um valor ou usando um método de substituição s.fillna(0)
s = pd.Series([2, 5, np.nan, 0, 3, None, 6]) s1 = s.fillna(-1) print(s.values) print(s1.values) ==> [ 2. 5. nan 0. 3. nan 6.] [ 2. 5. -1. 0. 3. -1. 6.]
# se quiser modificar série original s.fillna(-1, inplace=True) s ==> 0 2.0 1 5.0 2 -1.0 3 0.0 4 3.0 5 -1.0 6 6.0 dtype: float64
# Preenche com o elemento posterior ao NaN s2 = s.fillna(method='bfill') print(s.values) print(s2.values) ==> [ 2. 5. nan 0. 3. nan 6.] [2. 5. 0. 0. 3. 6. 6.]
# Preenche com o elemento anterior ao NaN s3 = s.fillna(method='ffill') print(s.values) print(s3.values) ==> [ 2. 5. nan 0. 3. nan 6.] [2. 5. 5. 0. 3. 3. 6.]
Métodos do objetos Series: ordenação
Método Descrição Exemplo
sort_values() Retorna uma Series ordenada pelos valores s.sort_values()
sort_index() Retorna uma Series ordenada pelos rótulos s.sort_index()
idadescsv3.head(10) ==> Nome Agatha 24 Alice 27 Alícia 18 Amanda 18 Ana Beatriz 44 Ana Clara 46 Ana Julia 49 Ana Luiza 47 Antônio 47 Arthur 41 Name: Idade, dtype: int64
ordenado_id = idadescsv3.sort_values() ordenado_id.head(10) ==> Nome Bernardo 18 Alícia 18 Amanda 18 Heloísa 18 Maria Fernanda 18 Benjamin 19 Rodrigo 19 Daniel 19 Cecília 21 Julia 21 Name: Idade, dtype: int64
ordenado_nome = ordenado_id.sort_index() ordenado_nome.head(10) ==> Nome Agatha 24 Alice 27 Alícia 18 Amanda 18 Ana Beatriz 44 Ana Clara 46 Ana Julia 49 Ana Luiza 47 Antônio 47 Arthur 41 Name: Idade, dtype: int64
Métodos do objetos Series: manipulando strings
str. capitalize() Retorna uma Series com os Strings convertidos para a forma capitalizada: primeiro caractere maiúsculo e caracteres restantes em minúsculo s.str.capitalize()
str. lower() Retorna uma Series com os Strings convertidos para letras minúsculas s.str.lower()
str. upper() Retorna uma Series com os Strings convertidos para letras maiúsculas s.str.upper()
str. title() Retorna uma Series com os Strings convertidos para o formato de título: primeira letra de cada palavra convertida para maiúscula s.str.title()
livros = pd.Series([“Introdução à programação com Python”,
“Curso Intensivo de Python”,
“Python para análise de dados”])
livros
==>
0 Introdução à programação com Python
1 Curso Intensivo de Python
2 Python para análise de dados
dtype: object
livros.str.title() ==> 0 Introdução À Programação Com Python 1 Curso Intensivo De Python 2 Python Para Análise De Dados dtype: object
# Não modifica a série original livros ==> 0 Introdução à programação com Python 1 Curso Intensivo de Python 2 Python para análise de dados dtype: object
linhas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] colunas = ["A", "B", "C", "D", "E"] np.random.seed(1) dados = np.random.randint(0,100,(10,5)) df = pd.DataFrame(dados, linhas, colunas) df ==>
A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
df = pd.DataFrame(dados, linhas, colunas) df ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
type(df)
==>
pandas.core.frame.DataFrame
Informações sobre o DataFrame
df.info()
==>
Int64Index: 10 entries, 1 to 10 Data columns (total 5 columns): A 10 non-null int32 B 10 non-null int32 C 10 non-null int32 D 10 non-null int32 E 10 non-null int32 dtypes: int32(5) memory usage: 280.0 bytes
df = pd.DataFrame(dados, linhas, colunas) df ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
Medidas estatísticas do DataFrame
CADA COLUNA NO DATAFRAME É TAMBÉM UM OBJETO DO TIPO SERIES
df.describe()
==>
A B C D E
count 10.000000 10.000000 10.000000 10.000000 10.000000
mean 35.800000 45.500000 45.100000 45.300000 45.000000
std 28.785799 37.880661 36.354581 27.912761 31.742016
min 5.000000 1.000000 0.000000 9.000000 1.000000
25% 11.750000 12.500000 7.750000 18.250000 21.250000
50% 29.500000 44.500000 56.500000 53.500000 39.000000
75% 52.000000 77.000000 70.000000 66.250000 74.250000
max 87.000000 94.000000 96.000000 86.000000 87.000000
df = pd.DataFrame(dados, linhas, colunas) df ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
Medidas estatísticas do DataFrame
CADA COLUNA NO DATAFRAME É TAMBÉM UM OBJETO DO TIPO SERIES
df.describe()
==>
A B C D E
count 10.000000 10.000000 10.000000 10.000000 10.000000
mean 35.800000 45.500000 45.100000 45.300000 45.000000
std 28.785799 37.880661 36.354581 27.912761 31.742016
min 5.000000 1.000000 0.000000 9.000000 1.000000
25% 11.750000 12.500000 7.750000 18.250000 21.250000
50% 29.500000 44.500000 56.500000 53.500000 39.000000
75% 52.000000 77.000000 70.000000 66.250000 74.250000
max 87.000000 94.000000 96.000000 86.000000 87.000000
# Plotagem de gráficos %matplotlib inline df.plot.box()
df.plot.bar()
# # Selecionar uma coluna df["A"] == df.A
# # Selecionando múltiplas colunas df[["C", "D", "E"]]
Verificar tipo de cada coluna:
type(df[“A”])
=»
pandas.core.series.Series
df = pd.DataFrame(dados, linhas, colunas) df ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
# Inclusão de colunas df["Total"] = df.A + df.B + df.C + df.D + df.E df ==> A B C D E Total 1 37 12 72 9 75 205 2 5 79 64 16 1 165 3 76 71 6 25 50 228 4 20 18 84 11 28 161 5 29 14 50 68 87 248 6 87 94 96 86 13 376 7 9 7 63 61 22 162 8 57 1 0 60 81 199 9 8 88 13 47 72 228 10 30 71 3 70 21 195
df = pd.DataFrame(dados, linhas, colunas) df ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
# Somatório de cada coluna df.sum() ==> A 358 B 455 C 451 D 453 E 450 dtype: int64
Adicionando um nova linha com o somatório
tot_coluna = pd.DataFrame(np.array(df.sum()).reshape(1,6), index=[‘Total’], columns=df.columns)
tot_coluna
==>
A B C D E Total
Total 358 455 451 453 450 2167
# Concatenando o DataFrame tot_coluna com o DataFrame df df2 = df.append(tot_coluna) df2 ==> A B C D E Total 1 37 12 72 9 75 205 2 5 79 64 16 1 165 3 76 71 6 25 50 228 4 20 18 84 11 28 161 5 29 14 50 68 87 248 6 87 94 96 86 13 376 7 9 7 63 61 22 162 8 57 1 0 60 81 199 9 8 88 13 47 72 228 10 30 71 3 70 21 195 Total 358 455 451 453 450 2167
# Outra forma de inserir uma nova linha seria ignorar os rótulos (índices) das linhas df3 = df2.append(df.mean(), ignore_index = True) df3 ==> A B C D E Total 0 37.0 12.0 72.0 9.0 75.0 205.0 1 5.0 79.0 64.0 16.0 1.0 165.0 2 76.0 71.0 6.0 25.0 50.0 228.0 3 20.0 18.0 84.0 11.0 28.0 161.0 4 29.0 14.0 50.0 68.0 87.0 248.0 5 87.0 94.0 96.0 86.0 13.0 376.0 6 9.0 7.0 63.0 61.0 22.0 162.0 7 57.0 1.0 0.0 60.0 81.0 199.0 8 8.0 88.0 13.0 47.0 72.0 228.0 9 30.0 71.0 3.0 70.0 21.0 195.0 10 358.0 455.0 451.0 453.0 450.0 2167.0 11 35.8 45.5 45.1 45.3 45.0 216.7
A B C D E Total 0 37.0 12.0 72.0 9.0 75.0 205.0 1 5.0 79.0 64.0 16.0 1.0 165.0 2 76.0 71.0 6.0 25.0 50.0 228.0 3 20.0 18.0 84.0 11.0 28.0 161.0 4 29.0 14.0 50.0 68.0 87.0 248.0 5 87.0 94.0 96.0 86.0 13.0 376.0 6 9.0 7.0 63.0 61.0 22.0 162.0 7 57.0 1.0 0.0 60.0 81.0 199.0 8 8.0 88.0 13.0 47.0 72.0 228.0 9 30.0 71.0 3.0 70.0 21.0 195.0 10 358.0 455.0 451.0 453.0 450.0 2167.0 11 35.8 45.5 45.1 45.3 45.0 216.7
# Exclusão de colunas usando o drop df4 = df.drop("Total", axis=1) # axis = 1, excluir a coluna df4 ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
Não altera na coluna original, pra deletar de verdade inplace = True:
# Para excluir a coluna "Total" de df, é necessário usar o parâmetro inplace df.drop("Total", axis = 1, inplace=True) # ou df = df.drop("Total", axis=1) df
# Exclusão de uma linha específica df2.drop(10, inplace=True) # axis por padrão é 0 (eixo das linhas) df2
A B C D E Total 1 37 12 72 9 75 205 2 5 79 64 16 1 165 3 76 71 6 25 50 228 4 20 18 84 11 28 161 5 29 14 50 68 87 248 6 87 94 96 86 13 376 7 9 7 63 61 22 162 8 57 1 0 60 81 199 9 8 88 13 47 72 228 Total 358 455 451 453 450 2167
Exclusão de múltiplas linhas
df2.drop([3, 7, 8], inplace=True)
df2
==>
A B C D E Total 1 37 12 72 9 75 205 2 5 79 64 16 1 165 4 20 18 84 11 28 161 5 29 14 50 68 87 248 6 87 94 96 86 13 376 9 8 88 13 47 72 228 Total 358 455 451 453 450 2167
df ==> A B C D E 1 37 12 72 9 75 2 5 79 64 16 1 3 76 71 6 25 50 4 20 18 84 11 28 5 29 14 50 68 87 6 87 94 96 86 13 7 9 7 63 61 22 8 57 1 0 60 81 9 8 88 13 47 72 10 30 71 3 70 21
# Seleção de linhas e colunas através dos rótulos df.loc[[1, 5, 6], ["D","E"]] ==> D E 1 9 75 5 68 87 6 86 13
# Pelos índices df.iloc[[0, 4, 5], [3,4]] # equivalente a df.loc[[1, 5, 6], ["D","E"]] ==> D E 1 9 75 5 68 87 6 86 13