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