4  CD: Manipulação

5 Introdução

Esta aula marca uma divisão no curso de trainee. Até agora, vocês estavam aprendendo várias ferramentas úteis, mas sem um objetivo específico além de simplesmente aprender a programar em Python. Nesta aula, vamos apresentar o objetivo, vocês irão aprender a realizar “projetos de Ciência de Dados”.

5.1 Ciência de Dados

5.1.1 A Ciência de Dados

A Ciência de Dados é um campo gigante, que nasceu via uma demanda de expandir a estatística para vias de “learn from data”, “more emphasis on data preparation and presentation rather than statistical modeling”, e “emphasis on prediction rather than inference”. Atualmente, o termo não é super bem definido, e o campo tem muita intersecção com outras disciplinas.

De acordo com a Wikipedia:

Data science is an interdisciplinary academic field that uses statistics, scientific computing, scientific methods, processes, algorithms and systems to extract or extrapolate knowledge and insights from data.

Fontes: “50 Years of Data Science” (2017) e Wikipedia.

5.1.2 As etapas de um projeto

Mais interessante que ficar tentando definir a disciplina, vamos entendê-la na prática. Como a aula é minha, e eu faço o que eu quiser, vou utilizar a explicação do livro “R for Data Science”.

Um projeto comum, no geral, se parece como abaixo. Veja uma breve explicação de cada tópico.

5.1.2.1 Importing

A primeira etapa é a importação. Alguns comentários:

  • Os dados podem vir de várias fontes, como arquivos locais, bancos de dados, APIs (application programming interface), ou de sites (via web scrapping).
  • Os dados podem estar em vários formatos como CSV, Excel, JSON, entre outros. É interessante ter um conhecimento básico de como cada um funciona.
  • Cada tipo de fonte tem uma maneira diferente de se interagir, e cada formato exige sua própria função. Para os casos mais simples, o pandas (e qualquer outra biblioteca de dataframes), tem funções para I/O.

Não vamos entrar em detalhes nesse tema. Não é algo super extenso nem complexo, e existem muitas referências online. Uma das mais completas que achei foi esse tutorial da RealPython.

5.1.2.2 Tidy

A próxima etapa é arrumar, tidy, os dados. Vamos falar sobre isso com mais detalhe, mas existe uma noção bem específica do que são dados arrumados, tidy data.

As três próximas etapas existem dentro de um ciclo.

5.1.2.3 Transform

Mesmo com dados já arrumados, ainda temos o interesse de transformá-los, para conseguir obter insights novos da mesma base de dados. Na aula de hoje, vamos dar alguns exemplos de interesses, e este tema ficará mais claro.

Visualizar e modelar os dados trará novos insights e novas demandas, de modo que estamos constantemente transformando os dados para criar novas visualizações e modelagens.

Tidy e transform juntos são chamados de data wrangling.

5.1.2.4 Visualize

Aqui, serei preguiçoso, o texto do Hadley Wickham é muito bom:

Visualisation is a fundamentally human activity. A good visualisation will show you things that you did not expect, or raise new questions about the data. A good visualisation might also hint that you’re asking the wrong question, or you need to collect different data. Visualisations can surprise you, but don’t scale particularly well because they require a human to interpret them.

5.1.2.5 Model

Um modelo é, em termos simplificados e a depender do contexto, um conjunto de hipóteses sobre o mundo – sobre o processo gerador dos dados –, acrescido com um método matemático e computacional de estimar esse processo.

Models are a fundamentally mathematical or computational tool, so they generally scale well. (…) But every model makes assumptions, and by its very nature a model cannot question its own assumptions. That means a model cannot fundamentally surprise you.

5.1.2.6 Comunication

O último passo é comunicação. As linguagens de programação provém ferramentas para expor seus resultados. O próprio Jupyter Notebook onde esta aula foi escrita é um exemplo disso. Mas existem muitas outras ferramentas mais avançadas para criar reports, livros, páginas na web, aplicativos, etc. No curso de trainee, não iremos cobrir essa etapa com detalhe.

Por fim, dos últimos comentários. Primeiro, e a programação?

Surrounding all these tools is programming. Programming is a cross-cutting tool that you use in every part of the project. You don’t need to be an expert programmer to be a data scientist, but learning more about programming pays off because becoming a better programmer allows you to automate common tasks, and solve new problems with greater ease.

E o que falta?

No curso do trainee iremos explicar todas as etapas (fora comunicação), mas é só isso que você precisará? Não, cada projeto exige seu conhecimento específico, em cada tema, cada disciplina, existem conceitos próprios que entrarão em alguma das etapas aqui descritas. Mas tudo bem, o importante é vocês saberem a base, e conseguirão ir atrás do adicional por conta própria.

O caminho é o seguinte:

  • Na aula de hoje, aprenderemos as etapas de tidy e transform.
  • Na aula 5, aprenderemos a etapa visualize.
  • Na aula 6, aprenderemos a etapa model.
  • Por fim, na aula 7, juntaremos tudo, aprendendo como fazer um projeto completo. Adicionalmente, aprenderemos como organizar um script para tal.

5.1.3 Data Wrangle e Tidy Data

5.1.3.1 Tidy data

Dados podem ser representados de várias maneiras, veja os exemplos abaixo. Nenhuma delas é necessariamente melhor que as outras, são organizações diferentes.

Para ciência de dados, será útil utilizar uma organização específica, chamada de “tidy dataset”. Três regras a definem:

  • Cada variável deve ter sua própria coluna.
  • Cada observação deve ter sua própria linha.
  • Cada valor deve ter sua própria célula.

Quais são os benefícios de organizar dados assim?

  • A consistência de utilizar uma mesma organização, independente de qual, é muito útil, especialmente porque facilita entender as ferramentas que trabalharão com ela.
  • A arrumação tidy é intuitiva, e é utilizada de maneira muito natural nas ferramentas, muitaz vezes vetorizadas, de visualização e modelagem.

5.1.3.2 Arrumando datasets

Agora que já entendemos o que é tidy data, podemos adquirir a habilidade de olhar para um dataset e, sabendo onde queremos chegar, elencar quais são as alterações a serem feitas – “remover esta linha”, “dividir essa coluna no meio”.

Após elencar quais alterações devem ser feitas, é simples fazer a ponte de quais manipulações de dados você quer fazer – “subset linhas” e “separar colunas”.

Por fim, só falta relembrar como é o código que aplica essa manipulação. Essa é a parte mais simples! É só voltar na aula passada, pesquisar na internet, ver no chat, ou perguntar para o seu amigo preferido!

Tendo as duas primeiras habilidades, você tem tudo o que precisa para pesquisar, e não há problema nenhum em ter que pesquisar, o problema é ter que pesquisar , e não saber como!. Agora, se você só sabe a terceira, você não precisa pesquisar, mas não sabe o que você não precisa pesquisar, o que não é especialmente útil.

Se você quiser ficar insano no pandas, rever a aula passada três vezes por dia, deitado numa banheira congelada, será ótimo, você ficará eficiênte muito rápidamente. Mas não precisa, essa eficiência vem com o tempo, e o mais importante é saber a lógica de “o que precisa alterar” e “quais são as manipulações que existem”.

Ok, sem mais delongas, vamos aprender a elencar alterações, vamos ver uns exemplos vide o PPT.

Qual foi a receitinha de bolo que aprendemos? (hmm bolo 😋). Recebemos um dataset, e:

  • Arrumar os dados para o formato data frame.
    • Todas as colunas são homogêneas?
      • Remover linhas “ruins”, converter valores.
    • Todas as colunas são do mesmo tamanho?
      • Remover linhas “ruins”.
  • Arrumar os dados para o formato tidy.
    • Toda coluna é uma variável?
      • Remover colunas “ruins”.
      • Separar/unir colunas colunas.
    • Toda linha é uma observação?
      • Quais são as variáveis que definem uma observação?
      • Pivot e melt.
    • Toda célula é um valor?
      • Transformar dados “ruins” em NA.
      • Lidar com dados NA.
  • Tenho mais de um dataset? Deixá-los tidy e então realizaram algum merge.

5.1.4 Transform

Após arrumarmos um dataset, ainda aplicaremos transformações com base nas demandas da fase de visualização e modelagem.

  • Manipular linhas.
    • Sorting.
    • Sampling.
    • Filtrar observações.
  • Transformar/criar colunas:
    • Alterar a unidade de uma variável.
    • Normalizar variáveis.
    • Agrupar as categorias de uma variável categórica.
    • Corrigir/formatar texto de variáveis string.
    • Manipular datas.
    • Criar novas colunas a partir de operações com múltiplas outras Exemplos: salário semanal * semanas trabalhadas; idade ao quadrado.
    • Criar uma coluna para ajudar em um plot.

Todas essas operações são factíveis de serem feitas com base na aula passada de pandas. Vocês verão muitos exemplos dessa etapa na aula 6.


😎

5.2 Data Wrangle com Pandas

import pandas as pd

# Carregar os dados
df = pd.read_csv("C:\\Users\\Usuario\\Downloads\\car.csv")
display(df["Unnamed: 0"])
display(df.head())

display(df.info())
0          0
1          1
2          2
3          3
4          4
        ... 
6014    6014
6015    6015
6016    6016
6017    6017
6018    6018
Name: Unnamed: 0, Length: 6019, dtype: int64
Unnamed: 0 Name Location Year Distance_Driven Fuel Type Transmission Owner Mileage Engine Power Seats Trunk New_Price Price
0 0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual First -- 26.6 km/kg 998 CC 58.16 bhp 5.0 No NaN 1.75
1 1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual First -- 19.67 kmpl 1582 CC 126.2 bhp 5.0 Yes NaN 12.50
2 2 Honda Jazz V Chennai 2011 46000km Petrol Manual First -- 18.2 kmpl 1199 CC 88.7 bhp 5.0 No 8.61 Lakh 4.50
3 3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual First -- 20.77 kmpl 1248 CC 88.76 bhp 7.0 No NaN 6.00
4 4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic Second -- 15.2 kmpl 1968 CC 140.8 bhp 5.0 Yes NaN 17.74
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6019 entries, 0 to 6018
Data columns (total 14 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   Unnamed: 0       6019 non-null   int64  
 1   Name             6019 non-null   object 
 2   Location         6019 non-null   object 
 3   Year             6019 non-null   int64  
 4   Distance_Driven  6019 non-null   object 
 5   Fuel Type        6019 non-null   object 
 6   Transmission     6019 non-null   object 
 7   Owner Mileage    6019 non-null   object 
 8   Engine           5983 non-null   object 
 9   Power            5983 non-null   object 
 10  Seats            5977 non-null   float64
 11  Trunk            6002 non-null   object 
 12  New_Price        824 non-null    object 
 13  Price            6019 non-null   float64
dtypes: float64(2), int64(2), object(10)
memory usage: 658.5+ KB
None

5.2.1 Remoção de colunas

df = df.drop("Unnamed: 0", axis=1)
display(df)
Name Location Year Distance_Driven Fuel Type Transmission Owner Mileage Engine Power Seats Trunk New_Price Price
0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual First -- 26.6 km/kg 998 CC 58.16 bhp 5.0 No NaN 1.75
1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual First -- 19.67 kmpl 1582 CC 126.2 bhp 5.0 Yes NaN 12.50
2 Honda Jazz V Chennai 2011 46000km Petrol Manual First -- 18.2 kmpl 1199 CC 88.7 bhp 5.0 No 8.61 Lakh 4.50
3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual First -- 20.77 kmpl 1248 CC 88.76 bhp 7.0 No NaN 6.00
4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic Second -- 15.2 kmpl 1968 CC 140.8 bhp 5.0 Yes NaN 17.74
... ... ... ... ... ... ... ... ... ... ... ... ... ...
6014 Maruti Swift VDI Delhi 2014 27365 Diesel Manual First -- 28.4 kmpl 1248 CC 74 bhp 5.0 Yes 7.88 Lakh 4.75
6015 Hyundai Xcent 1.1 CRDi S Jaipur 2015 100000km Diesel Manual First -- 24.4 kmpl 1120 CC 71 bhp 5.0 No NaN 4.00
6016 Mahindra Xylo D4 BSIV Jaipur 2012 55000km Diesel Manual Second -- 14.0 kmpl 2498 CC 112 bhp 8.0 Yes NaN 2.90
6017 Maruti Wagon R VXI Kolkata 2013 46m Petrol Manual First -- 18.9 kmpl 998 CC 67.1 bhp 5.0 No NaN 2.65
6018 Chevrolet Beat Diesel Hyderabad 2011 47m Diesel Manual First -- 25.44 kmpl 936 CC 57.6 bhp 5.0 No NaN 2.50

6019 rows × 13 columns

5.2.2 Contar quantidade de valores nulos e trata-los

df.isna().sum()
Name                  0
Location              0
Year                  0
Distance_Driven       0
Fuel Type             0
Transmission          0
Owner Mileage         0
Engine               36
Power                36
Seats                42
Trunk                17
New_Price          5195
Price                 0
dtype: int64
df = df.drop("New_Price", axis=1)
display(df)
Name Location Year Distance_Driven Fuel Type Transmission Owner Mileage Engine Power Seats Trunk Price
0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual First -- 26.6 km/kg 998 CC 58.16 bhp 5.0 No 1.75
1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual First -- 19.67 kmpl 1582 CC 126.2 bhp 5.0 Yes 12.50
2 Honda Jazz V Chennai 2011 46000km Petrol Manual First -- 18.2 kmpl 1199 CC 88.7 bhp 5.0 No 4.50
3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual First -- 20.77 kmpl 1248 CC 88.76 bhp 7.0 No 6.00
4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic Second -- 15.2 kmpl 1968 CC 140.8 bhp 5.0 Yes 17.74
... ... ... ... ... ... ... ... ... ... ... ... ...
6014 Maruti Swift VDI Delhi 2014 27365 Diesel Manual First -- 28.4 kmpl 1248 CC 74 bhp 5.0 Yes 4.75
6015 Hyundai Xcent 1.1 CRDi S Jaipur 2015 100000km Diesel Manual First -- 24.4 kmpl 1120 CC 71 bhp 5.0 No 4.00
6016 Mahindra Xylo D4 BSIV Jaipur 2012 55000km Diesel Manual Second -- 14.0 kmpl 2498 CC 112 bhp 8.0 Yes 2.90
6017 Maruti Wagon R VXI Kolkata 2013 46m Petrol Manual First -- 18.9 kmpl 998 CC 67.1 bhp 5.0 No 2.65
6018 Chevrolet Beat Diesel Hyderabad 2011 47m Diesel Manual First -- 25.44 kmpl 936 CC 57.6 bhp 5.0 No 2.50

6019 rows × 12 columns

df = df.dropna()

5.2.3 Separação de dados

df[['owner', 'mileage']] = df['Owner Mileage'].str.split('--', expand=True)
df = df.drop("Owner Mileage", axis = 1)
df
Name Location Year Distance_Driven Fuel Type Transmission Engine Power Seats Trunk Price owner mileage
0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual 998 CC 58.16 bhp 5.0 No 1.75 First 26.6 km/kg
1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual 1582 CC 126.2 bhp 5.0 Yes 12.50 First 19.67 kmpl
2 Honda Jazz V Chennai 2011 46000km Petrol Manual 1199 CC 88.7 bhp 5.0 No 4.50 First 18.2 kmpl
3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual 1248 CC 88.76 bhp 7.0 No 6.00 First 20.77 kmpl
4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic 1968 CC 140.8 bhp 5.0 Yes 17.74 Second 15.2 kmpl
... ... ... ... ... ... ... ... ... ... ... ... ... ...
6014 Maruti Swift VDI Delhi 2014 27365 Diesel Manual 1248 CC 74 bhp 5.0 Yes 4.75 First 28.4 kmpl
6015 Hyundai Xcent 1.1 CRDi S Jaipur 2015 100000km Diesel Manual 1120 CC 71 bhp 5.0 No 4.00 First 24.4 kmpl
6016 Mahindra Xylo D4 BSIV Jaipur 2012 55000km Diesel Manual 2498 CC 112 bhp 8.0 Yes 2.90 Second 14.0 kmpl
6017 Maruti Wagon R VXI Kolkata 2013 46m Petrol Manual 998 CC 67.1 bhp 5.0 No 2.65 First 18.9 kmpl
6018 Chevrolet Beat Diesel Hyderabad 2011 47m Diesel Manual 936 CC 57.6 bhp 5.0 No 2.50 First 25.44 kmpl

5960 rows × 13 columns

5.2.4 Conversão de dados

df['mileage'] = df['mileage'].str.replace(' kmpl', '').str.replace(' km/kg', '').str.strip()
df['mileage'] = pd.to_numeric(df['mileage'], errors='coerce')
df
Name Location Year Distance_Driven Fuel Type Transmission Engine Power Seats Trunk Price owner mileage
0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual 998 CC 58.16 bhp 5.0 No 1.75 First 26.60
1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual 1582 CC 126.2 bhp 5.0 Yes 12.50 First 19.67
2 Honda Jazz V Chennai 2011 46000km Petrol Manual 1199 CC 88.7 bhp 5.0 No 4.50 First 18.20
3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual 1248 CC 88.76 bhp 7.0 No 6.00 First 20.77
4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic 1968 CC 140.8 bhp 5.0 Yes 17.74 Second 15.20
... ... ... ... ... ... ... ... ... ... ... ... ... ...
6014 Maruti Swift VDI Delhi 2014 27365 Diesel Manual 1248 CC 74 bhp 5.0 Yes 4.75 First 28.40
6015 Hyundai Xcent 1.1 CRDi S Jaipur 2015 100000km Diesel Manual 1120 CC 71 bhp 5.0 No 4.00 First 24.40
6016 Mahindra Xylo D4 BSIV Jaipur 2012 55000km Diesel Manual 2498 CC 112 bhp 8.0 Yes 2.90 Second 14.00
6017 Maruti Wagon R VXI Kolkata 2013 46m Petrol Manual 998 CC 67.1 bhp 5.0 No 2.65 First 18.90
6018 Chevrolet Beat Diesel Hyderabad 2011 47m Diesel Manual 936 CC 57.6 bhp 5.0 No 2.50 First 25.44

5960 rows × 13 columns

df['Engine'] = df['Engine'].str.replace(' CC', '')
df["Power"] = df['Power'].str.replace(" bhp", '')
df
Name Location Year Distance_Driven Fuel Type Transmission Engine Power Seats Trunk Price owner mileage
0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual 998 58.16 5.0 No 1.75 First 26.60
1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual 1582 126.2 5.0 Yes 12.50 First 19.67
2 Honda Jazz V Chennai 2011 46000km Petrol Manual 1199 88.7 5.0 No 4.50 First 18.20
3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual 1248 88.76 7.0 No 6.00 First 20.77
4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic 1968 140.8 5.0 Yes 17.74 Second 15.20
... ... ... ... ... ... ... ... ... ... ... ... ... ...
6014 Maruti Swift VDI Delhi 2014 27365 Diesel Manual 1248 74 5.0 Yes 4.75 First 28.40
6015 Hyundai Xcent 1.1 CRDi S Jaipur 2015 100000km Diesel Manual 1120 71 5.0 No 4.00 First 24.40
6016 Mahindra Xylo D4 BSIV Jaipur 2012 55000km Diesel Manual 2498 112 8.0 Yes 2.90 Second 14.00
6017 Maruti Wagon R VXI Kolkata 2013 46m Petrol Manual 998 67.1 5.0 No 2.65 First 18.90
6018 Chevrolet Beat Diesel Hyderabad 2011 47m Diesel Manual 936 57.6 5.0 No 2.50 First 25.44

5960 rows × 13 columns

df = df.rename(columns={"mileage": "mileage kmpl", "Engine": "Engine CC", "Power": "Power bhp", ""})
df
Name Location Year Distance_Driven Fuel Type Transmission Engine CC Power bhp Seats Trunk Price owner mileage kmpl
0 Maruti Wagon R LXI CNG Mumbai 2010 72000km CNG Manual 998 58.16 5.0 No 1.75 First 26.60
1 Hyundai Creta 1.6 CRDi SX Option Pune 2015 41000km Diesel Manual 1582 126.2 5.0 Yes 12.50 First 19.67
2 Honda Jazz V Chennai 2011 46000km Petrol Manual 1199 88.7 5.0 No 4.50 First 18.20
3 Maruti Ertiga VDI Chennai 2012 87m Diesel Manual 1248 88.76 7.0 No 6.00 First 20.77
4 Audi A4 New 2.0 TDI Multitronic Coimbatore 2013 40670km Diesel Automatic 1968 140.8 5.0 Yes 17.74 Second 15.20
... ... ... ... ... ... ... ... ... ... ... ... ... ...
6014 Maruti Swift VDI Delhi 2014 27365 Diesel Manual 1248 74 5.0 Yes 4.75 First 28.40
6015 Hyundai Xcent 1.1 CRDi S Jaipur 2015 100000km Diesel Manual 1120 71 5.0 No 4.00 First 24.40
6016 Mahindra Xylo D4 BSIV Jaipur 2012 55000km Diesel Manual 2498 112 8.0 Yes 2.90 Second 14.00
6017 Maruti Wagon R VXI Kolkata 2013 46m Petrol Manual 998 67.1 5.0 No 2.65 First 18.90
6018 Chevrolet Beat Diesel Hyderabad 2011 47m Diesel Manual 936 57.6 5.0 No 2.50 First 25.44

5960 rows × 13 columns

df_sorted = df.sort_values('Price', ascending=False)
df_sorted
Name Location Year Distance_Driven Fuel Type Transmission Engine CC Power bhp Seats Trunk Price owner mileage kmpl
4079 Land Rover Range Rover 3.0 Diesel LWB Vogue Hyderabad 2017 25000km Diesel Automatic 2993 255 5.0 Yes 160.00 First 13.33
1505 Land Rover Range Rover Sport SE Kochi 2019 26,013m Diesel Automatic 2993 255 5.0 Yes 97.07 First 12.65
1974 BMW 7 Series 740Li Coimbatore 2018 28060km Petrol Automatic 2979 320 5.0 Yes 93.67 First 12.05
1984 BMW 7 Series 740Li Bangalore 2017 17465 Petrol Automatic 2979 320 5.0 No 93.00 First 12.05
5535 BMW X6 xDrive 40d M Sport Ahmedabad 2015 97,003m Diesel Automatic 2993 308.43 5.0 Yes 85.00 First 15.87
... ... ... ... ... ... ... ... ... ... ... ... ... ...
2605 Tata Nano Cx Jaipur 2010 57000km Petrol Manual 624 35 4.0 Yes 0.50 First 26.00
1628 Maruti 800 Std BSIII Jaipur 2004 12000 Petrol Manual 796 37 4.0 No 0.45 Second 16.10
2847 Hyundai Getz GLS Pune 2005 86000km Petrol Manual 1341 83 5.0 Yes 0.45 Second 15.30
3138 Maruti Zen LXI Jaipur 1998 95150 Petrol Manual 993 60 5.0 Yes 0.45 Third 17.30
1713 Tata Nano Lx Pune 2011 65000 Petrol Manual 624 35 4.0 Yes 0.44 Second 26.00

5960 rows × 13 columns

Recapitulando

5.3 Extras