Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Jesus Blazquez
Jesus Blazquez

Posted on

Dividir Dataframe en CSV s con OS y Pandas

Para este ejercicio se ha utlizado un ejemplo de datos de RRHH de la Comunidad de Madrid, descargado del siguiente enlace «https://datos.madrid.es/egob/catalogo/300584-12-rrhh_efectivos_ult_periodo.csv«

Importamos las librerias:

import osimport pandas as pd
Enter fullscreen modeExit fullscreen mode

con os.mkdir creamos el directorio:

os.mkdir('data/Datos_distrito')
Enter fullscreen modeExit fullscreen mode

Listamos la carpeta de origen de datos:

os.listdir('data')['Datos_distrito', 'rrhh202210.csv']
Enter fullscreen modeExit fullscreen mode

Creamos dos DF, uno con la lectura del CSV de origen de datos y otro con la seleccion de datos del Distrito Centro:

# Load the data into a DataFramedatos_df = pd.read_csv('data/rrhh202210.csv')# Select only data for the year 2002DistritoCentro = DistritoCentro = datos_df[datos_df.DENOMINACION_AREA == 'Distrito de Centro                                                              ']DistritoCentro
Enter fullscreen modeExit fullscreen mode

Debido a que los datos del campo DENOMINACION_AREA tienen un espacio posterior, debemos contar con ese espacio para que el comando anterior funcione correctamente:

Image1

Para solventar el problema de esta columna y eliminar el espacio en el string, ejecutamos el siguiente comando (este comando elimina los espacios anteriores y posteriores de una columna):

datos_df['DENOMINACION_AREA'] = datos_df['DENOMINACION_AREA'].str.strip()datos_df
Enter fullscreen modeExit fullscreen mode

Ahora ya podemos ejecutar el comando anterior, sin el espacio en el string

DistritoCentro = datos_df[datos_df.DENOMINACION_AREA == 'Distrito de Centro']DistritoCentro
Enter fullscreen modeExit fullscreen mode

Image2

exportamos los datos a un CSV:

# Write the new DataFrame to a CSV fileDistritoCentro.to_csv('data/Datos_distrito/DistritoCentro.csv')
Enter fullscreen modeExit fullscreen mode

Para no realizar esta tarea repetitiva, distrito por distrito, podemos crear un loop que recorra los denominaciones de area y genere los ficheros.

Listamos la columna «DENOMINACION_AREA» con el parametro «unique», para que solo nos muestre nombres unicos:

datos_df['DENOMINACION_AREA'].unique()
Enter fullscreen modeExit fullscreen mode

Image3

Probamos toda esta informacion en un loop:

for DENOMINACION_AREA in datos_df['DENOMINACION_AREA'].unique():   filename='data/Datos_distrito/Distrito' +'_'+ str(DENOMINACION_AREA) + '.csv'   print(filename)
Enter fullscreen modeExit fullscreen mode

Image4

Todo parece funcionar de forma correcta, pero antes de crear el loop y dividir la informacion por distritos, debemos realizar algunas modificaciones en los datos, ya que contienen valores nulos y mas espacios en blanco que arruinarian nuestra salida, por ello comenzaremos de nuevo con todo el origen de datos.

Importamos los datos:

datos_df_raw = pd.read_csv('data/rrhh202210.csv', on_bad_lines='skip', sep=";")datos_df_raw
Enter fullscreen modeExit fullscreen mode

Eliminamos los valores nulos de todo el DF:

datos_df=datos_df_raw.dropna()datos_df
Enter fullscreen modeExit fullscreen mode

Image5

Borramos todos los espacios delante y detras de todos los string, para ello creamos una funcion que haga un loop y recorra todos los string, eliminando los espacios delante y detras:

def space_remover(dataframe):    # iterating over the columns    for i in dataframe.columns:        # checking datatype of each columns        if dataframe[i].dtype == 'object':            # applying strip function on column            dataframe[i] = dataframe[i].map(str.strip)        else:            # if condn. is False then it will do nothing.            pass# applying whitespace_remover function on dataframespace_remover(datos_df)# printing dataframedatos_df
Enter fullscreen modeExit fullscreen mode

Image6

A continuacion remplazamos todos los espacios en banco por _, en todo el DF, dado que es necesario para que el ultimo paso se ejecute de forma correcta (los espacios en blanco causan muchos problemas con la libreria Pandas, siempre es mejor eliminarlos):

datos_df=datos_df.replace({" ": "_"}, regex=True)datos_df
Enter fullscreen modeExit fullscreen mode

Image7

añadimos el resto de pasos para crear los ficheros con la informacion por distritos:

for DENOMINACION_AREA in datos_df['DENOMINACION_AREA'].unique():    # Select data for the distrito    datos_area = datos_df[datos_df.DENOMINACION_AREA == DENOMINACION_AREA]    # Write the new DataFrame to a CSV file    filename = 'data/Datos_distrito/Distrito' + str(DENOMINACION_AREA) + '.csv'    datos_area.to_csv(filename)
Enter fullscreen modeExit fullscreen mode

como podemos ver se han creado lo ficheros CSV:

Image8

Y comprobamos que se ha realizado la division de forma correcta:

Image9

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

Passionate about technology, automation, Open Source and DevOps culture, visit https://jblazquez.es
  • Location
    Spain
  • Work
    Enginer at Aircall
  • Joined

Trending onDEV CommunityHot

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp