DataFrames in Python

por | Jul 15, 2017 | Python | 5 Comentarios

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

5 Comentarios

  1. Michael

    necesito una función para extraer el nombre de la fila y columna que contienen el dato mayor de un data frame.

    Responder
  2. Diego Calvo

    Se me ocurre que que ordener de mayor a menor y te quedes con la primera usando la función list(df.columns.values)

    Responder
  3. efueyo

    Estimados todos
    Con la sentencia «tabla[«fi»].max()», consigo el valor máximo de un dataframe. Mi problema es, ¿cómo puedo identificar el número de línea, o el índice correspondiente que identifica la fila en la que se encuentra ese valor en el df?.
    Agradeceré su ayuda.

    Responder
  4. horacio

    Hola como obtienes la media de una columna del dataframe por ejemplo de la columna valor y si tiene NaN incluido, gracias

    Responder
  5. juanitamurcia

    Hola necesito cantr los valores ==»manzanas» de una columna «Productos» de un archivo de excel s, pero me dice que el objeto «productos» no esta , pero cuando leo el data frame si aparece esta columna con este nombre

    Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *