domingo, 26 de julho de 2020

Métodos e atributos dos dataframes Pandas

Nos tutoriais anteriores aprendemos como chamar alguns dos métodos mais utilizados quando trabalhamos com séries da biblioteca Pandas. Os exemplos que usamos foram com apenas uma coluna ou série. Uma parte desses métodos eram de redução ou agregação que retornavam outras séries. Esses mesmo métodos podem ser chamados a partir de um dataframe assim como são chamados a partir de uma série. A diferença é que quando chamamos esses método e atributos a partir de uma série a operação é aplicada a uma coluna apenas. Quando chamamos os métodos e atributos a partir de um dataframe a operação é aplicada para cada coluna do dataframe.
Nesse tutorial vamos aprender a utilizar alguns dos métodos e atributos mais utilizados com dataframes.

Como obter informações básicas de um dataset

Primeiro vamos ler os dados de uma dataset, depois vamos ver algumas informações básicas desse dataset. As informações que estamos procurando são a forma do dataset, o tamanho, o número de dimensões e o seu tamanho. Essas informações podem ser obtidas com os atributos: shape, size, ndim e com a função len().

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes.shape
(9262, 9) # 9262 linhas e 9 colunas

>>> filmes.size
83358 # número de elementos do dataframe

>>> filmes.ndim
2 # número de dimensões, duas: colunas e linhas

>>> len(filmes)
9262 # número de linhas

Em um dataframe é possível, e até comum, que estejam faltando valores em alguns elementos do dataframe. E se você precisar saber quantos elementos tem valores guardados? A resposta é simples: o método count(). Esse método retorna uma série com os nomes das colunas e a quantidade de cada elemento dessa coluna que possuí um valor. O método count() é um exemplo de um método de agregação já que ele resumi os valores em um só.

>>> filmes.count()
indice                     9262
codigo_obra                9262
titulo_original            9262
titulo_brasil              9262
ano_producao               9259
diretor                    9262
razao_social_requerente    9262
cnpj_requerente            9262
data_exibicao              9262
dtype: int64

Uma coisa comum ao trabalhar com a biblioteca Pandas é saber o valor mínimo, máximo, média e mediana de um dataframe. Para obter essas informações podemos usar os métodos min(), max(), mean() e median(). Esses métodos retornam uma séries os com valores correspondentes.

>>> filmes.min()
indice                                                   0
codigo_obra                                              1
titulo_original                         A PRIMEIRA MISSA""
titulo_brasil                           A PRIMEIRA MISSA""
ano_producao                                           200
diretor                                   \t PABLO TRAPERO
razao_social_requerente    13 PRODUÇÕES E LOCAÇÕES LTDA-ME
cnpj_requerente                         00.020.648/0001-20
data_exibicao                                   01/02/2005
dtype: object

>>> filmes.max()
indice                                             9261
codigo_obra                                    20002501
titulo_original            ÚLTIMO TANGO EM BUENOS AIRES
titulo_brasil                   ÚLTIMOS DIAS NO DESERTO
ano_producao                                       2020
diretor                                      ÉRIC WARIN
razao_social_requerente       ÍRIS CINEMATOGRÁFICA LTDA
cnpj_requerente                      97.533.170/0001-73
data_exibicao                                 31/mar/17
dtype: object

>>> filmes.mean()
indice          4.630500e+03
codigo_obra     1.053494e+07
ano_producao    2.009945e+03
dtype: float64

>>> filmes.median()
indice              4630.5
codigo_obra     15004498.0
ano_producao        2011.0
dtype: float64

Se você quiser as informações do exemplo acima com um único método, podemos chamar o método describe(). Esse método vai te fornecer todas as informações do exemplo acima utilizando um único método.

>>> filmes.describe()
           indice   codigo_obra  ano_producao
count  9262.00000  9.262000e+03   9259.000000
mean   4630.50000  1.053494e+07   2009.944918
std    2673.85343  7.714715e+06     20.439854
min       0.00000  1.000000e+00    200.000000
25%    2315.25000  4.165462e+05   2006.000000
50%    4630.50000  1.500450e+07   2011.000000
75%    6945.75000  1.600608e+07   2015.000000
max    9261.00000  2.000250e+07   2020.000000

Nos métodos acima, podemos usar o parâmetro skipna. Com esse parâmetro definimos se os elementos sem valor devem se incluídos nas estatísticas básicas.

>>> filmes.max(skipna=False)
indice                                             9261
codigo_obra                                    20002501
titulo_original            ÚLTIMO TANGO EM BUENOS AIRES
titulo_brasil                   ÚLTIMOS DIAS NO DESERTO
ano_producao                                       2020
diretor                                      ÉRIC WARIN
razao_social_requerente       ÍRIS CINEMATOGRÁFICA LTDA
cnpj_requerente                      97.533.170/0001-73
data_exibicao                                 31/mar/17
dtype: object

Se passamos o valor False para o parâmetro skipna os elementos sem valor serão adicionados na estatística. O valor padrão desse parâmetro é True.

sábado, 25 de julho de 2020

Ordenando colunas do dataframe com Pandas

Uma coisa que vinhamos negligenciando, e uma das primeiras tarefas que devemos fazer quando importamos um dataframe, é analisar a ordem das colunas. No nosso dia-a-dia lemos da esquerda para a direita. E esse comportamento pode afetar como lemos os dados de um dataframe. Sem contar que é mais fácil encontrar um dado quando ele esta armazenado de forma organizada.
É aqui que começa nosso trabalho. Não tem um conjunto de regras que devemos seguir para organizar os dados. Uma boa prática é você mesmo criar um conjunto de regras e seguir sempre essas regras nos seus projetos. Isso se torna mais necessário quando o trabalho é em equipe e existem vários analistas gerando e trocando dados entre se.
Essas são algumas dicas para quando você importar um dataframe:

  • Classifique cada coluna seguindo um critério.
  • Agrupe as colunas mais comuns.
  • Coloque os grupos mais importantes nas primeiras colunas.

Nesse tutorial vamos ordenar as colunas fazendo uso dessas dicas, mas você pode adicionar outras dicas a essas ou não usar nenhuma.

Como ordenar colunas de um dataframe com Pandas

Para ordenar as colunas vamos utilizar o operador de índice.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes.columns
Index(['indice', 'codigo_obra', 'titulo_original', 'titulo_brasil',
       'ano_producao', 'diretor', 'razao_social_requerente', 'cnpj_requerente',
       'data_exibicao'],
      dtype='object')
>>> nova_ordem = [
... 'codigo_obra',
... 'titulo_brasil',
... 'titulo_original',
... 'data_exibicao',
... 'diretor',
... 'ano_producao',
... 'indice'
... ]
>>> filmes = filmes[nova_ordem]
>>> filmes
      codigo_obra                titulo_brasil  ... ano_producao indice
0           15639               PREÇO DA PAZ O  ...       2003.0      0
1            7603                  CARTOMANTEA  ...       2002.0      1
2           26453         BLACK & WHITE VOL. 9  ...       2005.0      2
3           17284               O GURU DO SEXO  ...       2002.0      3
4            4806        O AMERICANO TRANQUILO  ...       2002.0      4
...           ...                          ...  ...          ...    ...
9257     16001794        ROCK OF AGES: O FILME  ...       2012.0   9257
9258     15000966                       MATRIX  ...       1999.0   9258
9259     19002684               MILITARY WIVES  ...       2019.0   9259
9260       609762  ROBERTO CARLOS EM JERUSALÉM  ...       2011.0   9260
9261     19005137                       O POÇO  ...       2019.0   9261

[9262 rows x 7 columns]

Você pode ordenar colunas utilizando outros métodos além de utilizar o operador do índice. Outro método que pode ser utilizado é o filter(), que já vimos o seu funcionamento no tutorial passado.
Uma dica importante para ordenaras colunas é colocar os dados fixos primeiro.

sexta-feira, 24 de julho de 2020

Selecionando colunas com métodos do Pandas

A maioria dos códigos que utilizam a biblioteca Pandas ao selecionar uma coluna fazem uso do operador de índice. Em contrapartida é interessante saber que a biblioteca disponibiliza métodos para a mesma tarefa. Os métodos mais utilizados são select_dtypes() e filter().
Esses métodos devem ser utilizados para demandas diferentes. Se você deseja selecionar colunas pelo seu tipo, o método ideal é o select_dtypes() e se precisa selecionar pelo nome o método é o filter(). Nesse tutorial vamos aprender como utilizar esses métodos.

Como selecionar colunas com métodos da biblioteca Pandas

Chamando o método select_dtypes(), passando para o parâmetro include o valor 'O', sinalizamos para o método que queremos selecionar todas as colunas do tipo object.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes.select_dtypes(include='O')
                  titulo_original  ... data_exibicao
0                  PREÇO DA PAZ O  ...     06/jul/12
1                     CARTOMANTEA  ...     13/jul/04
2            BLACK & WHITE VOL. 9  ...    26/09/2007
3                        THE GURU  ...    16/12/2002
4                  QUIET AMERICAN  ...     15/jan/03
...                           ...  ...           ...
9257                 ROCK OF AGES  ...     09/jul/20
9258                   THE MATRIX  ...     25/nov/19
9259               MILITARY WIVES  ...    14/02/2020
9260  ROBERTO CARLOS EM JERUSALÉM  ...    20/12/2019
9261                       O POÇO  ...    18/10/2019

[9262 rows x 6 columns]

Se você quiser seleciona todas as colunas com números, podemos passar o valor 'number' para o parâmetro include.

>>> filmes.select_dtypes(include='number')
      indice  codigo_obra  ano_producao
0          0        15639        2003.0
1          1         7603        2002.0
2          2        26453        2005.0
3          3        17284        2002.0
4          4         4806        2002.0
...      ...          ...           ...
9257    9257     16001794        2012.0
9258    9258     15000966        1999.0
9259    9259     19002684        2019.0
9260    9260       609762        2011.0
9261    9261     19005137        2019.0

[9262 rows x 3 columns]

É possível selecionar mais de um tipo de dados de uma vez. Se quisermos selecionar colunas com números inteiros e strings, passamos uma lista para o parâmetro include:

>>> filmes.select_dtypes(include=['int64','object'])
      indice  codigo_obra  ...     cnpj_requerente data_exibicao
0          0        15639  ...  00.568.159/0001-07     06/jul/12
1          1         7603  ...  03.599.148/0001-82     13/jul/04
2          2        26453  ...  02.341.697/0001-90    26/09/2007
3          3        17284  ...  27.654.722/0001-16    16/12/2002
4          4         4806  ...  00.979.601/0001-98     15/jan/03
...      ...          ...  ...                 ...           ...
9257    9257     16001794  ...  33.015.827/0001-28     09/jul/20
9258    9258     15000966  ...  33.015.827/0001-28     25/nov/19
9259    9259     19002684  ...  02.668.665/0001-01    14/02/2020
9260    9260       609762  ...  15.372.472/0001-42    20/12/2019
9261    9261     19005137  ...      408.504.318-83    18/10/2019

[9262 rows x 8 columns]

Obs: 'O' e 'object' se referem a strings.
E se quiséssemos selecionar todas as colunas e deixar de lado apenas um tipo de dado? Nesse caso usaríamos o parâmetro exclude. A sua utilização é bem simples, passamos apenas o tipo de dados que não queremos. Desse modo o método retornará todas as colunas, com exceção das colunas com o tipo de dado passado para o parâmetro exclude. Esse método também aceita uma lista com os tipos de dados que não queremos selecionar.

>>> filmes.select_dtypes(exclude=['int64', 'float64'])
                  titulo_original  ... data_exibicao
0                  PREÇO DA PAZ O  ...     06/jul/12
1                     CARTOMANTEA  ...     13/jul/04
2            BLACK & WHITE VOL. 9  ...    26/09/2007
3                        THE GURU  ...    16/12/2002
4                  QUIET AMERICAN  ...     15/jan/03
...                           ...  ...           ...
9257                 ROCK OF AGES  ...     09/jul/20
9258                   THE MATRIX  ...     25/nov/19
9259               MILITARY WIVES  ...    14/02/2020
9260  ROBERTO CARLOS EM JERUSALÉM  ...    20/12/2019
9261                       O POÇO  ...    18/10/2019

[9262 rows x 6 columns]

Outro método utilizado para selecionar colunas é o método filter(). Esse método retorna colunas que os nomes contenham a string passada ao parâmetro like. Assim a string não precisa ser exata ao nome da coluna, basta que o rótulo tenha a string no começo, no meio ou no final. E se várias colunas tiverem a string, o método retornará todas elas.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes.filter(like='cnpj')
         cnpj_requerente
0     00.568.159/0001-07
1     03.599.148/0001-82
2     02.341.697/0001-90
3     27.654.722/0001-16
4     00.979.601/0001-98
...                  ...
9257  33.015.827/0001-28
9258  33.015.827/0001-28
9259  02.668.665/0001-01
9260  15.372.472/0001-42
9261      408.504.318-83

[9262 rows x 1 columns]

Nesse exemplo, não foi usado o nome exato da coluna, apenas uma parte (cnpj), e mesmo assim a coluna cnpj_requerente foi selecionada. No dataframe filmes, só existe uma coluna que tem a string cnpj, por isso o método retornou apenas uma coluna. Outro exemplo é passar a string 'titulo' para o parâmetro like. Como o dataframe possui duas colunas com a string 'titulo' (titulo_brasil e titulo_oroginal), o método filter() retornará duas colunas.

>>> filmes.filter(like='titulo')
                  titulo_original                titulo_brasil
0                  PREÇO DA PAZ O               PREÇO DA PAZ O
1                     CARTOMANTEA                  CARTOMANTEA
2            BLACK & WHITE VOL. 9         BLACK & WHITE VOL. 9
3                        THE GURU               O GURU DO SEXO
4                  QUIET AMERICAN        O AMERICANO TRANQUILO
...                           ...                          ...
9257                 ROCK OF AGES        ROCK OF AGES: O FILME
9258                   THE MATRIX                       MATRIX
9259               MILITARY WIVES               MILITARY WIVES
9260  ROBERTO CARLOS EM JERUSALÉM  ROBERTO CARLOS EM JERUSALÉM
9261                       O POÇO                       O POÇO

[9262 rows x 2 columns]

Outro parâmetro interessante do método filter() é o items. Com esse parâmetro podemos passar o nome das colunas que queremos. O parâmetro aceita uma lista com os valores.

>>> colunas = [
... 'diretor',
... 'indice'
... ]
>>> filmes.filter(items=colunas)
                                 diretor  indice
0     PAULO DE TARSO DE CARVALHO MORELLI       0
1         WAGNER DE ASSIS E PABLO URANGA       1
2              LENILDO MAURICIO DA SILVA       2
3                            DAISY MAYER       3
4                          PHILLIP NOYCE       4
...                                  ...     ...
9257                       ADAM SHANKMAN    9257
9258       LANA WACHOWSKI ANDY WACHOWSKI    9258
9259                      PETER CATTANEO    9259
9260    MARIO HUMBERTO MEIRELLES MOREIRA    9260
9261               ANDRE BORELLI MARTINS    9261

[9262 rows x 2 columns]

Selecionando múltiplas colunas de um dataframe com Pandas

Para selecionar uma única coluna passamos o nome da coluna como um índice do dataframe. Já vimos exemplos de como fazer isso nos tutoriais passados. Quando estamos trabalhando com um dataframe é possível que nem todos os dados que estejam ali nos interessem. Podemos resolver isso selecionando as colunas que vamos utilizar.
Nesse post vamos aprender a como selecionar duas colunas do dataframe filmes.csv.

Como selecionar duas colunas de um dataframe

Primeiro vamos importar o dataframe para uma variável. E depois criar uma lista com os nomes das colunas que pretendemos trabalhar:

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> titulos = filmes[
... [
... 'titulo_original',
... 'titulo_brasil'
... ]
... ]
>>> titulos.head()
        titulo_original          titulo_brasil
0        PREÇO DA PAZ O         PREÇO DA PAZ O
1           CARTOMANTEA            CARTOMANTEA
2  BLACK & WHITE VOL. 9   BLACK & WHITE VOL. 9
3              THE GURU         O GURU DO SEXO
4        QUIET AMERICAN  O AMERICANO TRANQUILO

Em algumas situações é preciso selecionar colunas de um dataframe. Utilizando índice o resultado pode ser uma série ou um dataframe. Quando passamos, como índice, uma lista com um único item, o resultado será um dataframe. E passando uma string o resultado será uma série.

>>> type(filmes[['titulo_original']])
<class 'pandas.core.frame.DataFrame'>

>>> type(filmes['titulo_original'])
<class 'pandas.core.series.Series'>

Uma alternativa ao índice, para selecionar colunas, é o atributo loc. Com esse atributo precisamos selecionar as linhas e passar o nome da coluna que queremos selecionar. Usaremos o seletor de dois pontos para selecionar todas as linhas. Se quisermos um dataframe passamos o nome como uma lista e para série passamos uma string:

>>> type(filmes.loc[:, ['titulo_brasil']])
<class 'pandas.core.frame.DataFrame'>

>>> type(filmes.loc[:, 'titulo_brasil'])
<class 'pandas.core.series.Series'>

Como funciona…

Utilizando o operador de índice temos bastante flexibilidade. Com ele podemos utilizar diferentes objetos. Quando passamos uma lista é retornado um dataframe com todas as colunas passadas na lista. Uma coisa interessante é que o novo dataframe respeita a ordem da lista, ou seja, se queremos mudar a posição de uma coluna podemos fazer isso trocando a ordem dos nomes na lista. Se passarmos uma string recebemos uma série.
No Segundo exemplo, vimos como podemos criar um dataframe com uma única coluna a partir de um dataframe. O mesmo acontece com a série.
No terceiro exemplo, aprendemos como criar uma série e um dataframe com o atributo loc.

Tem mais...

Um problema que utilizar o operador de índice pode causar é o de legibilidade. Isso acontece quando passamos uma lista muito longa. Para resolver esse problema podemos criar uma variável do tipo lista:

>>> colunas = [
... 'titulo_brasil',
... 'titulo_original'
... ]
>>> titulos = filmes[colunas]
>>> titulos
                    titulo_brasil              titulo_original
0                  PREÇO DA PAZ O               PREÇO DA PAZ O
1                     CARTOMANTEA                  CARTOMANTEA
2            BLACK & WHITE VOL. 9         BLACK & WHITE VOL. 9
3                  O GURU DO SEXO                     THE GURU
4           O AMERICANO TRANQUILO               QUIET AMERICAN
...                           ...                          ...
9257        ROCK OF AGES: O FILME                 ROCK OF AGES
9258                       MATRIX                   THE MATRIX
9259               MILITARY WIVES               MILITARY WIVES
9260  ROBERTO CARLOS EM JERUSALÉM  ROBERTO CARLOS EM JERUSALÉM
9261                       O POÇO                       O POÇO

[9262 rows x 2 columns]
>>> filmes.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9262 entries, 0 to 9261
Data columns (total 9 columns):
 #   Column                   Non-Null Count  Dtype
---  ------                   --------------  -----
 0   indice                   9262 non-null   int64
 1   codigo_obra              9262 non-null   int64
 2   titulo_original          9262 non-null   object
 3   titulo_brasil            9262 non-null   object
 4   ano_producao             9259 non-null   float64
 5   diretor                  9262 non-null   object
 6   razao_social_requerente  9262 non-null   object
 7   cnpj_requerente          9262 non-null   object
 8   data_exibicao            9262 non-null   object
dtypes: float64(1), int64(2), object(6)
memory usage: 434.2+ KB

Com o exemplo acima podemos perceber que a ordem das colunas foi alterada. A causa disso é a ordem em que os nomes das colunas foram colocados na lista.

quinta-feira, 23 de julho de 2020

Criando e deletando colunas no Pandas

Quando trabalhamos com dados em algum momento vamos precisar criar uma coluna para adicionar novos dados. Na grande maioria dos casos essa nova coluna será criada num dataframe já existente. Com a biblioteca Pandas podemos criar colunas de maneiras diferentes.
Nesse post, vamos criar novas colunas com o método assign() e deletar colunas, que não vamos precisar, com o método drop().

Como criar colunas com Pandas

Para criar uma nova coluna vamos atribuir um valor a um índice. É importante lembra que não vamos criar um dataframe novo, mas sim modificando o atual. Quando atribuir um valor a coluna, o valor passado será usado para todos os elementos da coluna. Vamos criar uma coluna indicando se já vimos o filme. Por padrão as novas colunas são adicionadas no final.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv')
>>> filmes['assistido'] = 0

Mesmo o exemplo acima funcionando e sendo bastante comum, ainda podemos usar o método assign(). Usando esse método um novo dataframe será criado com uma coluna a mais. O método usa o nome do parâmetro como o novo nome da coluna, então o novo nome deve ser um nome valido para um parâmetro.

>>> filmes = filmes.drop(columns='assistido')
>>> filmes.assign(assistido = 0)
      indice  codigo_obra  ... data_exibicao assistido
0          0        15639  ...     06/jul/12         0
1          1         7603  ...     13/jul/04         0
2          2        26453  ...    26/09/2007         0
3          3        17284  ...    16/12/2002         0
4          4         4806  ...     15/jan/03         0
...      ...          ...  ...           ...       ...
9257    9257     16001794  ...     09/jul/20         0
9258    9258     15000966  ...     25/nov/19         0
9259    9259     19002684  ...    14/02/2020         0
9260    9260       609762  ...    20/12/2019         0
9261    9261     19005137  ...    18/10/2019         0

[9262 rows x 10 columns]

Para remover uma coluna vamos usar o método drop(). O método drop() recebe o nome da coluna que queremos excluir do dataframe através do parâmetro columns. Veja um exemplo:

>>> filmes.drop(columns = 'assistido')

Repare que o método drop() cria um novo dataframe, assim como o método assign().
Uma alternativa ao método drop() é com a declaração del.

    del filmes[‘diretor’]

Tem mais...

Se você quiser adicionar uma coluna entre outras já existentes, o método que você deve utilizar é o insert(). Esse método recebe três parâmetros: o primeiro deve ser um inteiro com a posição da nova coluna; o segundo, o nome da nova coluna; e o terceiro os valores da coluna.

>>> filmes.insert(
... loc=6,
... column='nova',
... value=42
... )
>>> filmes.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9262 entries, 0 to 9261
Data columns (total 11 columns):
 #   Column                   Non-Null Count  Dtype
---  ------                   --------------  -----
 0   indice                   9262 non-null   int64
 1   codigo_obra              9262 non-null   int64
 2   titulo_original          9262 non-null   object
 3   titulo_brasil            9262 non-null   object
 4   ano_producao             9259 non-null   float64
 5   diretor                  9262 non-null   object
 6   nova                     9262 non-null   int64
 7   razao_social_requerente  9262 non-null   object
 8   cnpj_requerente          9262 non-null   object
 9   data_exibicao            9262 non-null   object
 10  assistido                9262 non-null   object
dtypes: float64(1), int64(3), object(7)
memory usage: 542.8+ KB

Nesse exemplo, adicionamos uma coluna depois da coluna ‘diretor’, na posição seis (lembre-se que o índice começa em zero). E adicionamos o valor quarenta e dois para todos os elementos dessa coluna. O parâmetro value aceita números inteiros, séries ou arrays.

quarta-feira, 22 de julho de 2020

Renomeando o nome de uma coluna com Pandas

Quando trabalhamos com dataframe é muito comum a renomeação das colunas. Renomear as coluna é importante, principalmente com idiomas que usam caracteres especiais, para que os nomes das colunas possam ser usados como nomes de atributos. Com isso em mente os nomes não podem começar com números e devem ser alfanuméricos com letras maiúsculas ou minúsculas, o underline também é um caractere válido. Uma boa escolha de nove descreve o conteúdo da coluna e não entra em conflito com os atributos, já existentes, dos dataframe e séries.
Nesse post vamos aprender a renomear os nomes das colunas dos dataframe e séries do Pandas. Com a renomeação dos nomes procuramos deixar o código mais organizado e de fácil compreensão. Uma escolha errada de nome para uma coluna pode dificultar o seu acesso.

Como fazer...

Nesse exemplo vamos renomear os nomes das colunas do dataframe com o método rename(). O método rename() aceita um dicionário com os nomes velhos e novos da coluna.

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv', encoding='latin-1')
>>> n_nomes = {
... 'Codigo da obra':'codigo_obra',
... 'Titulo Original':'titulo_original',
... 'Titulo no Brasil':'titulo_brasil',
... 'Ano de producão':'ano_producao',
... 'Diretor':'diretor',
... 'Razão Social do Requerente':'razao_social_requerente',
... 'CNPJ Requerente':'cnpj_requerente',
... 'Data de exibicão':'data_exibicao'}
>>> filmes.rename(columns=n_nomes).head()
   codigo_obra       titulo_original  ...     cnpj_requerente  data_exibicao
0        15639        PREÇO DA PAZ O  ...  00.568.159/0001-07      06/jul/12
1         7603           CARTOMANTEA  ...  03.599.148/0001-82      13/jul/04
2        26453  BLACK & WHITE VOL. 9  ...  02.341.697/0001-90     26/09/2007
3        17284              THE GURU  ...  27.654.722/0001-16     16/12/2002
4         4806        QUIET AMERICAN  ...  00.979.601/0001-98      15/jan/03

[5 rows x 8 columns]

Como funciona...

Com o método rename() podemos renomear os nomes das colunas. Os novos nomes das colunas são passados para o parâmetro colunms como um dicionário com os nomes antigos e os novos.

Encadeando métodos das séries do Pandas

Na linguagem python é possível chamar métodos usando o acesso a atributos. As variáveis apontam para objetos e os atributos e métodos retornam mais objetos. Assim podemos fazer chamadas sequenciais de métodos usando atributos. Pandas é uma biblioteca que faz bom uso dessa programação de fluxo. Muitos métodos e atributos criam séries e dataframes, que por sua vez podem criar mais séries e dataframes. E desses objetos mais métodos e atributos podem ser chamados.
Como exemplo de encadeamento de métodos, vamos usar a frase: Uma pessoa vai ao restaurante comer costelas, volta pra casa, lava o carro e depois assiste TV.
Uma forma de codificar essa frase em python:

(pessoa.ir('Restaurante')
.pede('Costela')
.come('Costela')
.ir('Casa')
.lavar('Carro')
.assistir('TV')
)

Nesse exemplo, a pessoa é uma instância de uma classe que pode chamar métodos. E cada método pode criar outra instância, desse jeito o encedeamento ocorre. No exemplo acima, o argumento passado para o método define como o método deve ser executado.
Nesse post vamos aprender como o encadeamento funciona nas séries do Pandas.

Como fazer...

Primeiro vamos extrair uma coluna do dataset e encadear métodos da série:

>>> import pandas as pd
>>> filmes = pd.read_csv('filmes.csv', encoding='latin-1')
>>> diretor = filmes.Diretor
>>> diretor.value_counts().head(5)
LENILDO MAURICIO DA SILVA    218
JULIANO COSTA BENDAZOLI       69
JOSE ANTONIO GASPAR RAMOS     39
ROGER LEMOS                   26
LENILDO MAURÍCIO DA SILVA     22
Name: Diretor, dtype: int64

Nesse exemplo, chamamos o método value_counts(). Esse método retorna uma série contendo os elementos da série progenitora com a quantidade de vezes que o valor aparece na série. E logo em seguida chamamos o método head(5), que cria uma nova série com os cinco primeiros elementos retornados pelo método value_counts(). Pode não parecer mais a cada chamada de método criamos uma série nova.
Uma consequência do encadeamento de métodos e atributos é a dificuldade na hora de fazer a depuração. Isso acontece porque nenhum dos resultados dos métodos é guardado numa variável. Num encadeamento muito longo fica difícil encontrar o local do erro, se acontecer algum (e vai.). Uma dica para minimizar esse tipo de erro é colocar o resultado da chamada do método numa variável separada e depurar o seu código linha a linha.