DataFrames in Python

Declarar un DataFrame (vacio)

import pandas as pd
data = pd.DataFrame(columns=('order', 'family', 'num', 'sequence'))

Añadir datos al DataFrame

data.loc[len(data)]=['Tymovirales','Alphaflexiviridae',1,'AACGTTAAUGGUGAA'] 
data.loc[len(data)]=['Tymovirales','Alphaflexiviridae',2,'AACGTTAAUGGUGAA']

 

Declarar un DataFrame (con datos)

import pandas as pd
clases = ["clase 1"] * 5 + ["clase 2"] * 5
tipos = ["tipo 1"] * 2 + ["tipo 2"] * 3 + ["tipo 3"] * 2 + ["tipo 4"] * 3
valores = [0,1,2,3,4] + [5,6,7,8,9]
df = pd.DataFrame({"clase": clases, "tipo": tipos, "valor": valores})

Mostrar el Dataframe completo

print(df)

   clase    tipo    valor
0  clase 1  tipo 1      0
1  clase 1  tipo 1      1
2  clase 1  tipo 2      2
3  clase 1  tipo 2      3
4  clase 1  tipo 2      4
5  clase 2  tipo 3      5
6  clase 2  tipo 3      6
7  clase 2  tipo 4      7
8  clase 2  tipo 4      8
9  clase 2  tipo 4      9

Mostrar los 5 primeros elementos del Dataframe

print(df[:5])

     clase    tipo  valor
0  clase 1  tipo 1      0
1  clase 1  tipo 1      1
2  clase 1  tipo 2      2
3  clase 1  tipo 2      3
4  clase 1  tipo 2      4

Acceder al primer registro

 print(df.loc[1])

clase    clase 1
tipo      tipo 1
valor          1
Name: 1, dtype: object

Acceder al primer registro (otra forma)

 print(df.iloc[1])

clase    clase 1
tipo      tipo 1
valor          1
Name: 1, dtype: object

Seleccionar la columna clase

print(df['clase'])

0    clase 1
1    clase 1
2    clase 1
3    clase 1
4    clase 1
5    clase 2
6    clase 2
7    clase 2
8    clase 2
9    clase 2
Name: clase, dtype: object

Selecionar dos columnas

 print(df[['clase','tipo']])

   clase    tipo
0  clase 1  tipo 1
1  clase 1  tipo 1
2  clase 1  tipo 2
3  clase 1  tipo 2
4  clase 1  tipo 2
5  clase 2  tipo 3
6  clase 2  tipo 3
7  clase 2  tipo 4
8  clase 2  tipo 4
9  clase 2  tipo 4

Calcula la media de los valores que puede calcularse

 print(df.mean())

valor    4.5
dtype: float64

Calcula la suma de los valores que puede calcularse

 print(df.groupby('clase').sum())

         valor
clase         
clase 1     10
clase 2     35

Cuenta lo valores contables ignorando los nulos

 print(df.groupby('clase').count())

         tipo  valor
clase               
clase 1     5      5
clase 2     5      5

Transformar a lista una columna del dataframe

 print(df['clase'].tolist())

['clase 1', 'clase 1', 'clase 1', 'clase 1', 'clase 1', 'clase 2', 'clase 2', 'clase 2', 'clase 2', 'clase 2']

Ordenar valores por clase y tipo

print(df.sort_values(by=['clase','tipo'], ascending=[True,False]))

Borrar duplicados del data frame

df.loc[len(df)]=['clase 1','tipo 1',1]
df.loc[len(df)]=['clase 1','tipo 1',1]
print(df)
print(df.drop_duplicates())

Borrar duplicados de una columna

print(df['clase'].drop_duplicates().values.tolist())

Reemplazar subcadena para todos los campos de una columna

df['clase'] = df['clase'].replace({' ': ''}, regex=True)
print(df)
     clase    tipo  valor
0   clase1  tipo 1      0
1   clase1  tipo 1      1
2   clase1  tipo 2      2
3   clase1  tipo 2      3
4   clase1  tipo 2      4
5   clase2  tipo 3      5
6   clase2  tipo 3      6
7   clase2  tipo 4      7
8   clase2  tipo 4      8
9   clase2  tipo 4      9
10  clase1  tipo 1      1
11  clase1  tipo 1      1

Reemplazar subcadena para todos los campos del dataframe

df = df.replace({' ': ''}, regex=True)
print(df)

     clase   tipo  valor
0   clase1  tipo1      0
1   clase1  tipo1      1
2   clase1  tipo2      2
3   clase1  tipo2      3
4   clase1  tipo2      4
5   clase2  tipo3      5
6   clase2  tipo3      6
7   clase2  tipo4      7
8   clase2  tipo4      8
9   clase2  tipo4      9
10  clase1  tipo1      1
11  clase1  tipo1      1

Filtrar por valores de una columna

df2 = df[df['tipo'] == 'tipo1']
print(df2)

     clase   tipo  valor
0   clase1  tipo1      0
1   clase1  tipo1      1
10  clase1  tipo1      1
11  clase1  tipo1      1

Filtrar por columnas concretas del dataframe

df2 = df.filter(items=['clase', 'valor'])
print(df2)

     clase  valor
0   clase1      0
1   clase1      1
2   clase1      2
3   clase1      3
4   clase1      4
5   clase2      5
6   clase2      6
7   clase2      7
8   clase2      8
9   clase2      9
10  clase1      1
11  clase1      1


Filtar por valores de una columna que pertenezcan a un conjunto de datos

df2 = df[df['valor'].isin([3,6])]
print(df2)

    clase   tipo  valor
3  clase1  tipo2      3
6  clase2  tipo3      6

Filtar por valores que cumpla una condición

df2 = df[df['valor'] > 6]
print(df2)

    clase   tipo  valor
7  clase2  tipo4      7
8  clase2  tipo4      8
9  clase2  tipo4      9

Unión de dos data frames por columna

df1 = pd.DataFrame({'A1': ['A0', 'A1', 'A2', 'A3'],
'B1': ['B11', 'B12', 'B13', 'B14'],
'C1': ['C11', 'C12', 'C13', 'C14']})


df2 = pd.DataFrame({'A2': ['A0', 'A2', 'A2', 'A4'],
'B2': ['B21', 'B22', 'B23', 'B24'],
'C2': ['C21', 'C22', 'C23', 'C24']})


result = df1.merge(df2, left_on='A1', right_on='A2', how='outer')

print(result)

 A1 B1 C1 A2 B2 C2
0 A0 B11 C11 A0 B21 C21
1 A1 B12 C12 NaN NaN NaN
2 A2 B13 C13 A2 B22 C22
3 A2 B13 C13 A2 B23 C23
4 A3 B14 C14 NaN NaN NaN
5 NaN NaN NaN A4 B24 C24

Otros artículos que pueden ser de interés:

Autor: Diego Calvo