import pandas as pd
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1")
dat_csv
id | Nombre | Sexo | Sueldo | |
---|---|---|---|---|
0 | 1 | Juan | m | 10000 |
1 | 2 | Ramón | m | 20000 |
2 | 3 | Anna | f | 10500 |
3 | 4 | Julieta | f | 13000 |
4 | 5 | Pablo | m | 30000 |
5 | 6 | Pedro | m | 10500 |
6 | 7 | Gaby | f | 11000 |
7 | 8 | Cecilia | f | 27000 |
Si queremos que en lugar de todos los datos, se restrinja la salida a las primeras cinco filas, podemos utilizar el método head().
dat_csv.head()
id | Nombre | Sexo | Sueldo | |
---|---|---|---|---|
0 | 1 | Juan | m | 10000 |
1 | 2 | Ramón | m | 20000 |
2 | 3 | Anna | f | 10500 |
3 | 4 | Julieta | f | 13000 |
4 | 5 | Pablo | m | 30000 |
En los dos casos anteriores, aparecen los elementos de la primera fila como los nombres de las columnas de datos, si no quisiéramos este comportamiento podemos agregar el atributo header = None, de la siguiente manera:
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1", header = None)
dat_csv
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | id | Nombre | Sexo | Sueldo |
1 | 1 | Juan | m | 10000 |
2 | 2 | Ramón | m | 20000 |
3 | 3 | Anna | f | 10500 |
4 | 4 | Julieta | f | 13000 |
5 | 5 | Pablo | m | 30000 |
6 | 6 | Pedro | m | 10500 |
7 | 7 | Gaby | f | 11000 |
8 | 8 | Cecilia | f | 27000 |
Si quisiéramos que tomar una determinada línea como cabecera, debemos asignarle al parámetro header el número de fila correspondiente, en el siguiente ejemplo se toma la línea 3 como cabecera:
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1", header = 3)
dat_csv
3 | Anna | f | 10500 | |
---|---|---|---|---|
0 | 4 | Julieta | f | 13000 |
1 | 5 | Pablo | m | 30000 |
2 | 6 | Pedro | m | 10500 |
3 | 7 | Gaby | f | 11000 |
4 | 8 | Cecilia | f | 27000 |
Por defecto, read_csv asigna un índice numérico predeterminado que comienza con cero al leer los datos. Sin embargo, es posible alterar este comportamiento pasando el nombre de la columna que utilizaremos como índice. A continuación se dejara la columna id como índice de la tabla:
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1", index_col='id')
dat_csv
Nombre | Sexo | Sueldo | |
---|---|---|---|
id | |||
1 | Juan | m | 10000 |
2 | Ramón | m | 20000 |
3 | Anna | f | 10500 |
4 | Julieta | f | 13000 |
5 | Pablo | m | 30000 |
6 | Pedro | m | 10500 |
7 | Gaby | f | 11000 |
8 | Cecilia | f | 27000 |
En el caso de que queramos restringir la tabla a algunas columnas específicas, podemos realizarlo con el parámetro usecols indicando en una lista las columnas seleccionadas.
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1", usecols=['Nombre', 'Sueldo'])
dat_csv.head()
Nombre | Sueldo | |
---|---|---|
0 | Juan | 10000 |
1 | Ramón | 20000 |
2 | Anna | 10500 |
3 | Julieta | 13000 |
4 | Pablo | 30000 |
Si queremos eliminar una fila en particular, podemos utilizar el parámetro skiprows, en el siguiente caso se eliminan las filas 1 y 4:
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1", skiprows = [1,4])
dat_csv
id | Nombre | Sexo | Sueldo | |
---|---|---|---|---|
0 | 2 | Ramón | m | 20000 |
1 | 3 | Anna | f | 10500 |
2 | 5 | Pablo | m | 30000 |
3 | 6 | Pedro | m | 10500 |
4 | 7 | Gaby | f | 11000 |
5 | 8 | Cecilia | f | 27000 |
Para presentar un número dado de filas desde el inicio, podemos utilizar el parámetro nrows, en el siguiente ejemplo se presentan las primeras tres filas de datos.
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1", nrows=3)
dat_csv
id | Nombre | Sexo | Sueldo | |
---|---|---|---|---|
0 | 1 | Juan | m | 10000 |
1 | 2 | Ramón | m | 20000 |
2 | 3 | Anna | f | 10500 |
Para seleccionar un rango específico de filas podemos utilizar el método query especificando los límites aplicables sobre una determinada columna:
dat_csv = pd.read_csv('empleados.csv', encoding = "ISO-8859-1")
dat_csv.query('2 < id < 6')
id | Nombre | Sexo | Sueldo | |
---|---|---|---|---|
2 | 3 | Anna | f | 10500 |
3 | 4 | Julieta | f | 13000 |
4 | 5 | Pablo | m | 30000 |
Para tratar con los datos de una columna, podemos recuperarlos dentro de una lista mediante el uso de un bucle for, y luego si es necesario convertir la lista en una array como se muestra a continuación:
import pandas as pd
import numpy as np
dat_csv = pd.read_csv('datos.csv', encoding = "ISO-8859-1")
datos_x = dat_csv.nombre
datos_y = dat_csv.sexo
x = []
y = []
for i in dat_csv.nombre:
x.append(i)
for j in dat_csv.sexo:
y.append(j)
print(x)
print(y)
x_array = np.array(x)
print(type(x_array))
print(x_array)
['Juan', 'Pedro', 'Marcelo', 'Anna'] ['m', 'm', 'm', 'f'] <class 'numpy.ndarray'> ['Juan' 'Pedro' 'Marcelo' 'Anna']
En el caso de trabajar directamente con un archivo de Excel, podemos utilizar el método read_excel()
import pandas as pd
movies_json = pd.read_json('json1.json')
movies_json.head()
nombre | edad | estado_civil | esposo | hijos | autos | |
---|---|---|---|---|---|---|
0 | Ana | 33 | True | Pablo | Cecilia | {'modelo': 'Ford', 'color': 'rojo'} |
1 | Ana | 33 | True | Pablo | Luis | {'modelo': 'Chevrolet', 'color': 'azul'} |
import pandas as pd
pd.read_html('index.html')
[ 0 1 2 3 0 id Nombre Sexo Sueldo 1 1 Anna f 10000]
import pandas as pd
import sqlite3
conn = sqlite3.connect("mibase.sqlite")
df = pd.read_sql_query("SELECT * FROM producto;", conn)
df.head()
id | nombre | sexo | |
---|---|---|---|
0 | 1 | Pedro | m |
1 | 2 | Anna | f |
2 | 3 | Celeste | f |
import xml.etree.cElementTree as et
import pandas as pd
def obtenerValorDeNodo(node):
return node.text if node is not None else None
def main():
parsed_xml = et.parse("datos.xml")
dfcols = ['nombre', 'email', 'telefono', 'calle']
df_xml = pd.DataFrame(columns=dfcols)
for node in parsed_xml.getroot():
nombre = node.attrib.get('nombre')
email = node.find('email')
telefono = node.find('telefono')
calle = node.find('direccion/calle')
df_xml = df_xml.append( pd.Series([nombre, obtenerValorDeNodo(email), obtenerValorDeNodo(telefono), obtenerValorDeNodo(calle)], index=dfcols), ignore_index=True)
print(df_xml)
main()
nombre email telefono calle 0 Juan juan@gmail.com 011-1111111111 Tacuarí 342 1 Anna anna@gmail.com None None 2 Pedro pedro@gmail.com 011-2222222222 Río de Janeiro 215 3 Gabriela gabriela@gmail.com 011-3333333333 Rivadavia 8345