Operacions bàsiques en pandas¶
Creació d’un dataframe a partir d’una estructura 2D¶
Pot ser una llista de llistes, un diccionari, …
>>> import pandas as pd
>>> x = pd.DataFrame([ ['Joan', 23, 'Vic'], # podem afegir el paràmetre opcional columns = ['A','B','C']
... ['Anna', 56, 'Cardona'],
... ['Roc', 12, 'Reus'],
... ['Paula', 37, 'Flix'] ])
>>> x
0 1 2
0 Joan 23 Vic
1 Anna 56 Cardona
2 Roc 12 Reus
3 Paula 37 Flix
>>> df = pd.DataFrame({'Nom': ['Joan', 'Anna', 'Quim', 'Paula'],
... 'Edat': [23, 56, 12, 37],
... 'Població': ['Vic', 'Cardona', 'Sallent', 'Flix'] })
>>> df
Nom Edat Població
0 Joan 23 Vic
1 Anna 56 Cardona
2 Quim 12 Sallent
3 Paula 37 Flix
Consulta: estructura i mides del DataFrame¶
>>> df.columns
Index(['Nom', 'Edat', 'Població'], dtype='object')
>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Nom 4 non-null object
1 Edat 4 non-null int64
2 Població 4 non-null object
dtypes: int64(1), object(2)
memory usage: 224.0+ bytes
>>> len(df) # nombre de files
4
>>> df.size # nombre de cel·les
12
Reassignació de l’índex¶
>>> d2 = df.set_index('Nom') # Atenció: retorna un DataFrame nou
>>> d2
Edat Població
Nom
Joan 23 Vic
Anna 56 Cardona
Quim 12 Sallent
Paula 37 Flix
>>> d2.index
Index(['Joan', 'Anna', 'Quim', 'Paula'], dtype='object', name='Nom')
Selecció de columnes, files i cel·les¶
>>> df['Població'] # selecció d'una columna; retorna una Series
0 Vic
1 Cardona
2 Sallent
3 Flix
Name: Població, dtype: object
>>> df[['Població', 'Nom']] # selecció de diverses columnes; retorna un DataFrame
Població Nom
0 Vic Joan
1 Cardona Anna
2 Sallent Quim
3 Flix Paula
>>> df.loc[1] # selecció d'una fila per l'índex
Nom Anna
Edat 56
Població Cardona
Name: 1, dtype: object
>>> d2.loc['Joan']
Edat 23
Població Vic
Name: Joan, dtype: object
>>> d2.loc[['Joan', 'Paula']] # selecció de diverses files per l'índex
Edat Població
Nom
Joan 23 Vic
Paula 37 Flix
>>> d2.iloc[1] # selecció d'una fila per la posició
Edat 56
Població Cardona
Name: Anna, dtype: object
>>> d2.loc['Anna', 'Edat'] # selecció d'una cel·la
56
>>> df.loc[1:] # atenció: la llesca inclou l'últim element!
Nom Edat Població
1 Anna 56 Cardona
2 Quim 12 Sallent
3 Paula 37 Flix
>>> d2.loc['Anna':'Quim']
Edat Població
Nom
Anna 56 Cardona
Quim 12 Sallent
>>> d2.iloc[1:2] # ... en canvi amb iloc no
Edat Població
Nom
Anna 56 Cardona
Modificació del contingut¶
>>> d2.loc['Anna', 'Edat'] = 57 # canvia una cel·la
>>> d2.loc['Joan'] = [34, 'Torelló'] # canvia una fila; si no existeix, l'afegeix
>>> d2['Telf'] = [121,232,343,454] # canvia una columna; si no existeix, l'afegeix
>>> d2.loc['Anna':'Quim', 'Edat'] = 16 # canvia diverses cel·les
>>> x = d2.drop('Anna') # retorna un DF sense la fila de l'Anna ("esborrant" la fila)
>>> d2.drop(columns=['Telf'], inplace=True) # esborra una columna
Selecció per contingut, segons una o més condicions¶
>>> d2['Edat'] > 25 # retorna una Series de booleans
Nom
Joan True
Anna False
Quim False
Paula True
Name: Edat, dtype: bool
>>> d2[d2['Edat'] > 25] # selecció per una condició simple
Edat Població
Nom
Joan 34 Torelló
Paula 37 Flix
>>> d2[(d2['Població'] == 'Sallent') | (d2['Edat'] > 25)] # &, |, ~ (AND, OR, NOT)
Edat Població
Nom
Joan 34 Torelló
Quim 16 Sallent
Paula 37 Flix
>>> d2.loc[d2['Edat'] > 25, 'Població'] # poblacions de les persones majors de 25 anys
Nom
Joan Torelló
Paula Flix
Name: Població, dtype: object
>>> d2.loc[d2['Edat'] > 25, 'Població'].to_dict() # transformar una Series a diccionari; també existeix to_list()
{'Joan': 'Torelló', 'Paula': 'Flix'}
>>> d2.loc[d2['Edat'] < 25,'Edat'] = 25 # exemple: posar l'edat mínima a 25
Consulta d’estadístiques bàsiques¶
>>> df['Extra'] = [10, 20, 50, 60]
>>> df
Nom Edat Població Extra
0 Joan 23 Vic 10
1 Anna 56 Cardona 20
2 Quim 12 Sallent 50
3 Paula 37 Flix 60
>>> df.max() # Altres mètodes: min(), mean(), std(), median(), sum(), count()
Nom Quim
Edat 56
Població Vic
Extra 60
dtype: object
>>> df.min(axis=1) # mínim de cada fila
0 10
1 20
2 12
3 37
dtype: int64
>>> df.describe() # estadístiques bàsiques diverses
Edat Extra
count 4.000000 4.000000
mean 32.000000 35.000000
std 18.991226 23.804761
min 12.000000 10.000000
25% 20.250000 17.500000
50% 30.000000 35.000000
75% 41.750000 52.500000
max 56.000000 60.000000