Open In Colab

Si no funciona el botó podeu copiar el següent enllaç

[1]:
import pandas as pd

4 - Modificació

A més de fer seleccions, en alguns moments necessitarem incorporar nova informació a les nostres taules de dades.

[2]:
df2 = pd.DataFrame([('Foreign Cinema', 'Restaurant', 289.0),
                   ('Liho Liho', 'Restaurant', 224.0),
                   ('500 Club', 'bar', 80.5),
                   ('The Square', 'bar', 25.30)],
           columns=('name', 'type', 'AvgBill')
                 )
df2
[2]:
name type AvgBill
0 Foreign Cinema Restaurant 289.0
1 Liho Liho Restaurant 224.0
2 500 Club bar 80.5
3 The Square bar 25.3

Afegir columnes

Tenim diverses maneres d’afegir columnes a un dataFrame:

  • Mitjançant el nom de la columna que volem afegir, tal com afegim una clau nova a un diccionari.

  • insert: és un mètode que necessita 3 paràmetres. La posició on volem afegir la columna (loc), el seu nom (column) i la llista de valors (value).

  • assign: molt semblant a l’anterior, però permet afegir múltiples columnes.

Vegem-ne alguns exemples:

[3]:
df2['Day'] = "Monday" # Com un diccionari
df2
[3]:
name type AvgBill Day
0 Foreign Cinema Restaurant 289.0 Monday
1 Liho Liho Restaurant 224.0 Monday
2 500 Club bar 80.5 Monday
3 The Square bar 25.3 Monday
[4]:
df2['Day'] = ['Monday', 'Tuesday', 'Wednesday', 'Thursday']
df2
[4]:
name type AvgBill Day
0 Foreign Cinema Restaurant 289.0 Monday
1 Liho Liho Restaurant 224.0 Tuesday
2 500 Club bar 80.5 Wednesday
3 The Square bar 25.3 Thursday
[5]:
#Emprarem el mètode insert. Indicant on volem inserir aquesta columna amb el paràmetre loc

df2.insert(loc=1, column="Stars", value=[2,2,3,4])
df2
[5]:
name Stars type AvgBill Day
0 Foreign Cinema 2 Restaurant 289.0 Monday
1 Liho Liho 2 Restaurant 224.0 Tuesday
2 500 Club 3 bar 80.5 Wednesday
3 The Square 4 bar 25.3 Thursday

El mètode assing permet afegir múltiples columnes en una sola operació. És interessant veure que la columna anomenada AvgHalfBill és el resultat de dividir una columna entre 2.

[6]:
df3 = df2.assign(AvgHalfBill=df2.AvgBill / 2, Michelin_Star=3)
df3
[6]:
name Stars type AvgBill Day AvgHalfBill Michelin_Star
0 Foreign Cinema 2 Restaurant 289.0 Monday 144.50 3
1 Liho Liho 2 Restaurant 224.0 Tuesday 112.00 3
2 500 Club 3 bar 80.5 Wednesday 40.25 3
3 The Square 4 bar 25.3 Thursday 12.65 3

Afegir files

Per afegir files a un dataframe tenim

  • concat: concatena dos o més dataFrames separats per comes.

[7]:
df_files = df2.copy() # Fem una còpia de tota la informació

#Cream un diccionari
fila = {"name":"Isaacs", "type":"bar" ,"AvgBill":[148.2], "day":"Friday"}

nou_df = pd.concat([df_files, pd.DataFrame(fila)])
[8]:
nou_df
[8]:
name Stars type AvgBill Day day
0 Foreign Cinema 2.0 Restaurant 289.0 Monday NaN
1 Liho Liho 2.0 Restaurant 224.0 Tuesday NaN
2 500 Club 3.0 bar 80.5 Wednesday NaN
3 The Square 4.0 bar 25.3 Thursday NaN
0 Isaacs NaN bar 148.2 NaN Friday

Eliminar columnes i files

Molts cops tendrem la necessitat d’eliminar informació que no ens és interessant.

Columnes

Tenim el mètode drop que ens proporciona un nou dataFrame sense la(es) fila(es) o la(les) columna(es) que seleccionem. Si volem eliminar columnes podem fer-ho especificant la llista de columnes al paràmetre columns de la següent manera:

[9]:
df_no_michelin = df3.drop(columns=["Michelin_Star"]) # Eliminamos la última columna que hemos creado
df_no_michelin
[9]:
name Stars type AvgBill Day AvgHalfBill
0 Foreign Cinema 2 Restaurant 289.0 Monday 144.50
1 Liho Liho 2 Restaurant 224.0 Tuesday 112.00
2 500 Club 3 bar 80.5 Wednesday 40.25
3 The Square 4 bar 25.3 Thursday 12.65

Anem a veure com ha quedat el dataframe del qual hem eliminat una columna:

[10]:
df3
[10]:
name Stars type AvgBill Day AvgHalfBill Michelin_Star
0 Foreign Cinema 2 Restaurant 289.0 Monday 144.50 3
1 Liho Liho 2 Restaurant 224.0 Tuesday 112.00 3
2 500 Club 3 bar 80.5 Wednesday 40.25 3
3 The Square 4 bar 25.3 Thursday 12.65 3

Files

Per poder eliminar files, fem servir la mateixa funció drop, aquesta vegada sense el paràmetre que hem fet servir anteriorment, simplement indiquem els índexs a eliminar:

[11]:
df_less_rows = df_no_michelin.drop([1,3])
df_less_rows
[11]:
name Stars type AvgBill Day AvgHalfBill
0 Foreign Cinema 2 Restaurant 289.0 Monday 144.50
2 500 Club 3 bar 80.5 Wednesday 40.25

Feines

Fer l’activitat 1.2 del homework