{"id":160744,"date":"2026-01-28T11:24:53","date_gmt":"2026-01-28T10:24:53","guid":{"rendered":"https:\/\/multi.liora.io\/?p=160744"},"modified":"2026-02-25T09:52:39","modified_gmt":"2026-02-25T08:52:39","slug":"que-es-un-dataframe","status":"publish","type":"post","link":"https:\/\/liora.io\/es\/que-es-un-dataframe","title":{"rendered":"\u00bfQu\u00e9 es un DataFrame?"},"content":{"rendered":"\n<p><strong>Pandas es una de las principales librer\u00edas de Python, que es un lenguaje de programaci\u00f3n orientado a objetos de alto nivel muy popular entre los Data Scientists. Las estructuras m\u00e1s utilizadas en este m\u00f3dulo son las Series y los DataFrames. A diferencia de las Series, que son objetos correspondientes a paneles unidimensionales, los DataFrames son paneles bidimensionales compuestos por filas y columnas, que permiten destacar las relaciones entre las distintas variables de la serie de datos.<\/strong><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><i>Un DataFrame es una serie de Series Pandas indexadas por un valor. En este art\u00edculo, presentaremos la estructura de los DataFrames y luego veremos sus diferentes atributos y m\u00e9todos b\u00e1sicos, y explicaremos su utilidad y funcionamiento.<\/i><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-1-como-se-presenta-un-dataframe\">1) \u00bfC\u00f3mo se presenta un DataFrame?<\/h2>\n\n\n\n<p>El formato de estas estructuras puede compararse con los diccionarios de Python. Efectivamente, las claves son los nombres de las columnas y los valores son las Series. Su estructura puede considerarse similar a la de una hoja de c\u00e1lculo de Excel.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><i>Cada fila contiene datos espec\u00edficos de varias columnas, que son variables. El nombre de las filas de un DataFrame se llama \u00abindex\u00bb que, por defecto, empieza siempre por 0.<\/i><\/p>\n<\/blockquote>\n\n\n\n<p>Sin embargo, se puede indexar las filas de un DataFrame por cualquier valor: ID de cliente o incluso, unidad de tiempo. En cuanto al nombre de las columnas, est\u00e1n etiquetadas con el nombre de una variable espec\u00edfica a la que se le dan diferentes valores. Los valores de estas variables pueden adoptar muchos formatos de datos. Cada columna se asocia a un tipo de datos, por ejemplo una cadena de car\u00e1cter (objeto) que se relaciona con datos cualitativos, o una columna con un tipo integrador, que corresponder\u00e1 a n\u00fameros enteros. El tipo de las variables se puede cambiar seg\u00fan las necesidades utilizando el m\u00e9todo <b>astype().<\/b><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter is-style-not-rounded\"><img decoding=\"async\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/7\/2021\/11\/Sans-titre-2-02-933x1024.png\" alt=\"\" style=\"object-fit:cover\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-2-atributos-y-metodos-que-no-deben-faltar\">2) Atributos y m\u00e9todos que no deben faltar<\/h2>\n\n\n\n<p>Hay muchas formas de manipular los DataFrames. Los atributos y los m\u00e9todos de esta estructura Pandas son muy numerosos. Este art\u00edculo se centrar\u00e1 esencialmente en los m\u00e9todos b\u00e1sicos para aprender a manejar los DataFrames.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-a-importacion-y-observacion-de-la-serie-de-datos\">A- Importaci\u00f3n y observaci\u00f3n de la serie de datos<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-importacion-e-informacion-de-las-variables\">Importaci\u00f3n e informaci\u00f3n de las variables<\/h4>\n\n\n\n<p>Para importar una serie de datos, la librer\u00eda Pandas propone un m\u00e9todo muy pr\u00e1ctico que es <b>pd.read_csv().<\/b> Si el archivo que contiene la serie de datos est\u00e1 en otro formato que no sea el de <i>Comma Separated Value<\/i>, basta con cambiar la terminaci\u00f3n del m\u00e9todo por el tipo de archivo correcto. Por ejemplo, un archivo de Excel se importar\u00e1 de la siguiente manera: <b>pd.read_excel().<\/b> Este m\u00e9todo importa la serie de datos en una estructura DataFrame.<\/p>\n\n\n\n<p>Despu\u00e9s se debe utilizar el m\u00e9todo <b>info()<\/b> para obtener la informaci\u00f3n sobre el DataFrame. Este m\u00e9todo devuelve el tipo de las variables, el n\u00famero de columnas, el n\u00famero de filas no nulas, el tipo de \u00edndice, el tama\u00f1o de la memoria de la serie de datos, etc. Tambi\u00e9n se recomienda utilizar el m\u00e9todo <b>describe()<\/b>, que permite conocer algunas estad\u00edsticas descriptivas sobre el DataFrame. Por ejemplo, permite saber el valor m\u00ednimo y m\u00e1ximo de cada variable, los cuartiles o incluso la desviaci\u00f3n tipo de las columnas. Este m\u00e9todo es \u00fatil para hacerse una idea de la distribuci\u00f3n de las variables.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-primera-vista-del-dataframe\">Primera vista del DataFrame<\/h4>\n\n\n\n<p>Cuando se importa la serie de datos, es necesario tener una visi\u00f3n general del DataFrame. El primer paso es utilizar el atributo <b>shape<\/b>, que permite conocer la dimensi\u00f3n del DataFrame y devolver una tupla (<i>n\u00famero_de_filas, n\u00famero_de_columnas)<\/i>. Para entender la serie de datos, hay tres m\u00e9todos muy \u00fatiles para ver las filas del DataFrame :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El m\u00e9todo <b>head()<\/b> devuelve las cinco primeras filas del DataFrame, si no se especifica un n\u00famero entre par\u00e9ntesis.<\/li>\n\n\n\n<li>Por otro lado, el m\u00e9todo <b>tail()<\/b> permite visualizar las \u00faltimas cinco l\u00edneas del DataFrame.<\/li>\n<\/ul>\n\n\n\n<p>Estos dos m\u00e9todos permiten visualizar el principio y el final de la serie de datos. Esto incluye una ventaja real para los datos de tipo Times Series, para tener una visi\u00f3n simple de la evoluci\u00f3n de los datos en el tiempo, pero tambi\u00e9n permite, en un caso m\u00e1s general, ver si los datos mantienen un cierto sentido: si el principio del DataFrame difiere considerablemente del final del mismo, es necesario comprender la causa e intentar resolver este problema antes de cualquier manipulaci\u00f3n de los datos.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si se desea una visualizaci\u00f3n m\u00e1s aleatoria de las filas, se debe preferir el m\u00e9todo <b>sample()<\/b>. Devuelve las filas de forma aleatoria. Por defecto, el resultado solo devuelve una fila del DataFrame. Por lo tanto, es preferible escribir un n\u00famero entero entre par\u00e9ntesis para visualizar un mayor n\u00famero de filas y, en consecuencia, hacerse una mejor idea del contenido del DataFrame.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-slicing\">Slicing<\/h4>\n\n\n\n<p>Podemos filtrar nuestros datos utilizando el <b>slice<\/b>. Por ejemplo, <b>df[:2]<\/b> devuelve las dos primeras filas de nuestro DataFrame. No hay que olvidar que el \u00faltimo n\u00famero es ex\u00f3geno al resultado, lo que significa que en el ejemplo, el slicing devolver\u00e1 las filas al \u00edndice 0 y 1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b-manipulacion-de-datos\">B- Manipulaci\u00f3n de datos<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-anadir-y-modificar-datos\">A\u00f1adir y modificar datos<\/h4>\n\n\n\n<p>Como se explic\u00f3 en la introducci\u00f3n, los DataFrames son tablas bidimensionales, que corresponden a los ejes de las filas (eje = 0) y de las columnas (eje = 1). Se pueden a\u00f1adir tantas filas o columnas como sea necesario, especificando el eje en el que queremos a\u00f1adir estos nuevos valores.<\/p>\n\n\n\n<p>Lo interesante de los DataFrames es que es muy f\u00e1cil recuperar, cambiar, cargar o buscar datos en esta estructura. Imaginemos un DataFrame indexado por tiempo, y que queremos recuperar todos los datos del 18 de diciembre de 2020. Con la funci\u00f3n <b>iloc<\/b>, es posible recuperar todos los datos de las variables de esa fecha. Adem\u00e1s, es posible sustituir un valor de una de las columnas con esa funci\u00f3n especificando el \u00edndice y el nombre de la columna. Por ejemplo, si el 18 de diciembre de 2020 no hay ning\u00fan valor, pero sabemos que el valor real es 25, simplemente podemos hacer <b>df.iloc[index_de_la_l\u00ednea, \u201ccolumns\u201d] = 25<\/b>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-indexacion-booleana\">Indexaci\u00f3n booleana<\/h4>\n\n\n\n<p>Se pueden filtrar los datos seg\u00fan una o varias condiciones, lo que permite recuperar datos espec\u00edficos o concretos para una necesidad precisa, y revelar toda su informaci\u00f3n \u00fatil y necesaria. Es lo que se llama <b>indexaci\u00f3n booleana<\/b>. Esta t\u00e9cnica permite saber si el valor de una prueba es Verdadero o Falso y devuelve el resultado en forma de vector. Por ejemplo, tenemos una serie de datos donde cada columna es un mes del a\u00f1o, el DataFrame es de tipo DateTimeIndex, y queremos obtener las filas en las que el mes de enero es estrictamente superior a 25, entonces la forma de escribir el c\u00f3digo es: <b>df[df[\u00abenero\u00bb] &gt; 25].<\/b> Este m\u00e9todo de indexaci\u00f3n booleana permite filtrar los datos para devolver solo las filas que cumplen la condici\u00f3n \u00abvalores superiores a 25 para el mes de enero\u00bb. Por lo general, la indexaci\u00f3n booleana se escribe con el siguiente formato: <b>df[\u00abcondici\u00f3n\u00bb].<\/b><\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-las-columnas\">Las columnas<\/h4>\n\n\n\n<p>Los DataFrames permiten manipular y almacenar una gran cantidad de datos. Sin embargo, en un contexto profesional, a menudo hay que tratar con grandes vol\u00famenes de datos y con variables muy numerosas. El aumento del n\u00famero de variables tiene un impacto particular en la organizaci\u00f3n de los DataFrames. En efecto, cuanto mayor es el n\u00famero de columnas, menos f\u00e1cil es visualizar los nombres de las variables. Para resolver este problema, hay varias manipulaciones posibles.<\/p>\n\n\n\n<p>Si el DataFrame tiene diez variables diferentes, se puede saber cu\u00e1les son sus nombres utilizando el atributo <b>df.columns<\/b>. Pero cuando la serie de datos tiene ochocientas columnas, la visualizaci\u00f3n de los nombres de las variables no ser\u00e1 completa. Para resolver este problema, se puede utilizar el m\u00e9todo <b>df.columns.toList()<\/b>, que permite almacenar los nombres de las columnas en una lista de <a href=\"https:\/\/liora.io\/es\/python-o-r-que-elegir\">Python<\/a>. Adem\u00e1s, para saber si hay filas que no son \u00fanicas, que pueden ser duplicadas, el m\u00e9todo <b>df[\u00abcolumns\u00bb].value_counts()<\/b> es una forma sencilla de comprobarlo. Para facilitar la lectura, si estamos acostumbrados a trabajar con paneles, se puede a\u00f1adir <b>to_frame()<\/b> al final del c\u00f3digo para visualizar los resultados en formato DataFrame. Este m\u00e9todo de <b>value_counts()<\/b> nos permite conocer la ocurrencia de las modalidades de una variable.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-los-valores-perdidos\">Los valores perdidos<\/h4>\n\n\n\n<p>Cuando se trabaja en un proyecto de <a href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">Data Science<\/a> es muy com\u00fan lidiar con valores perdidos o valores at\u00edpicos. Los DataFrames permiten resolver este problema con una facilidad desconcertante. Por ejemplo, en el caso de datos cualitativos, uno de los m\u00e9todos para sustituir los valores que faltan es tratar el modo de la modalidad. Para ello, basta con utilizar el siguiente c\u00f3digo para conseguir esa manipulaci\u00f3n: <b>df[columna].fillna(df[columnas].mode()[0]).<\/b> O, por ejemplo, sustituir los valores cuantitativos por la media.<\/p>\n\n\n\n<p>De este modo, los DataFrames permiten potenciar las correlaciones y las relaciones entre los datos gracias a las distintas manipulaciones posibles, definir filtros sobre los datos presentados a los equipos y almacenar y manipular datos masivos. En conclusi\u00f3n, los DataFrames permiten que los profesionales de la Data hagan que sus datos hablen, decidiendo las condiciones y las manipulaciones que se van a realizar.<\/p>\n\n\n\n<p>Si quieres aprender a hacer hablar a los datos, nuestros <a href=\"https:\/\/liora.io\/es\/formacion-data-scientist\">cursos de formaci\u00f3n de data Science<\/a> son para ti.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/liora.io\/es\/nuestros-cursos-de-data\">Descubrir los programas<\/a><\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"1) \u00bfC\u00f3mo se presenta un DataFrame?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Un DataFrame es una estructura bidimensional de Pandas compuesta por filas y columnas, similar a una hoja de Excel o diccionarios Python (claves = nombres columnas, valores = Series). Las filas tienen un \u00edndice (por defecto num\u00e9rico desde 0, indexable por cualquier valor). Cada columna tiene un nombre y un tipo de datos espec\u00edfico (ej. objeto para cualitativos, entero para num\u00e9ricos), modificable con astype().\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"2) Atributos y m\u00e9todos que no deben faltar\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Los DataFrames tienen numerosos m\u00e9todos y atributos. Este art\u00edculo se enfoca en los b\u00e1sicos para aprender a manipularlos.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"A- Importaci\u00f3n y observaci\u00f3n de la serie de datos\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Importaci\u00f3n: pd.read_csv() para CSV, pd.read_excel() para Excel. info() devuelve informaci\u00f3n del DataFrame (tipos, n\u00famero columnas\/filas no nulas, \u00edndice, memoria). describe() da estad\u00edsticas descriptivas (m\u00ednimo, m\u00e1ximo, cuartiles, desviaci\u00f3n t\u00edpica). shape devuelve dimensi\u00f3n (filas, columnas). head(n) muestra primeras n filas (5 por defecto), tail(n) \u00faltimas n filas, sample(n) muestra n filas aleatorias. Slicing df[:2] devuelve las dos primeras filas.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"B- Manipulaci\u00f3n de datos\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"A\u00f1adir\/modificar datos: se pueden a\u00f1adir filas\/columnas especificando eje (0 filas, 1 columnas). iloc permite recuperar\/modificar datos por \u00edndice y columna (ej. df.iloc[\u00edndice_fila, 'columna'] = valor). Indexaci\u00f3n booleana filtra por condiciones: df[df['columna'] &gt; valor] devuelve filas que cumplen la condici\u00f3n. df.columns devuelve nombres columnas, df.columns.toList() los almacena en lista Python. value_counts() cuenta ocurrencias de modalidades. Para valores perdidos: fillna(df[columna].mode()[0]) para cualitativos (moda), o media para cuantitativos.\"\n      }\n    }\n  ]\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Pandas es una de las principales librer\u00edas de Python, que es un lenguaje de programaci\u00f3n orientado a objetos de alto nivel muy popular entre los Data Scientists. Las estructuras m\u00e1s utilizadas en este m\u00f3dulo son las Series y los DataFrames. A diferencia de las Series, que son objetos correspondientes a paneles unidimensionales, los DataFrames son paneles bidimensionales compuestos por filas y columnas, que permiten destacar las relaciones entre las distintas variables de la serie de datos.<\/p>\n","protected":false},"author":85,"featured_media":184124,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2440],"class_list":["post-160744","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ia"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/160744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/comments?post=160744"}],"version-history":[{"count":5,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/160744\/revisions"}],"predecessor-version":[{"id":184128,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/posts\/160744\/revisions\/184128"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media\/184124"}],"wp:attachment":[{"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/media?parent=160744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/es\/wp-json\/wp\/v2\/categories?post=160744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}