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