Python Pandas - Concatenación

Pandas ofrece varias facilidades para combinar fácilmente Series, DataFramey Panel objetos.

pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
  • objs - Se trata de una secuencia o asignación de objetos Series, DataFrame o Panel.

  • axis - {0, 1, ...}, predeterminado 0. Este es el eje para concatenar.

  • join- {'interior', 'exterior'}, predeterminado 'exterior'. Cómo manejar índices en otros ejes. Exterior para unión e interior para intersección.

  • ignore_index- booleano, por defecto Falso. Si es True, no use los valores de índice en el eje de concatenación. El eje resultante se etiquetará como 0, ..., n - 1.

  • join_axes- Esta es la lista de objetos Index. Índices específicos para usar para los otros (n-1) ejes en lugar de realizar una lógica de conjunto interno / externo.

Concatenar objetos

los concatLa función hace todo el trabajo pesado de realizar operaciones de concatenación a lo largo de un eje. Creemos diferentes objetos y hagamos concatenaciones.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two])

Sus output es como sigue -

Marks_scored     Name   subject_id
1             98     Alex         sub1
2             90      Amy         sub2
3             87    Allen         sub4
4             69    Alice         sub6
5             78   Ayoung         sub5
1             89    Billy         sub2
2             80    Brian         sub4
3             79     Bran         sub3
4             97    Bryce         sub6
5             88    Betty         sub5

Supongamos que quisiéramos asociar claves específicas con cada una de las piezas del DataFrame cortado. Podemos hacer esto usando elkeys argumento -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'])

Sus output es como sigue -

x  1  98    Alex    sub1
   2  90    Amy     sub2
   3  87    Allen   sub4
   4  69    Alice   sub6
   5  78    Ayoung  sub5
y  1  89    Billy   sub2
   2  80    Brian   sub4
   3  79    Bran    sub3
   4  97    Bryce   sub6
   5  88    Betty   sub5

El índice de la resultante se duplica; cada índice se repite.

Si el objeto resultante tiene que seguir su propia indexación, establezca ignore_index a True.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],keys=['x','y'],ignore_index=True)

Sus output es como sigue -

Marks_scored     Name    subject_id
0             98     Alex          sub1
1             90      Amy          sub2
2             87    Allen          sub4
3             69    Alice          sub6
4             78   Ayoung          sub5
5             89    Billy          sub2
6             80    Brian          sub4
7             79     Bran          sub3
8             97    Bryce          sub6
9             88    Betty          sub5

Observe, el índice cambia completamente y las claves también se anulan.

Si es necesario agregar dos objetos axis=1, luego se agregarán las nuevas columnas.

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print pd.concat([one,two],axis=1)

Sus output es como sigue -

Marks_scored    Name  subject_id   Marks_scored    Name   subject_id
1           98      Alex      sub1         89         Billy         sub2
2           90       Amy      sub2         80         Brian         sub4
3           87     Allen      sub4         79          Bran         sub3
4           69     Alice      sub6         97         Bryce         sub6
5           78    Ayoung      sub5         88         Betty         sub5

Concatenar usando agregar

Un atajo útil para concat son los métodos de instancia adjunta en Series y DataFrame. Estos métodos en realidad son anteriores a la concat. Se concatenan a lo largoaxis=0, a saber, el índice -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print one.append(two)

Sus output es como sigue -

Marks_scored    Name  subject_id
1           98      Alex      sub1
2           90       Amy      sub2
3           87     Allen      sub4
4           69     Alice      sub6
5           78    Ayoung      sub5
1           89     Billy      sub2
2           80     Brian      sub4
3           79      Bran      sub3
4           97     Bryce      sub6
5           88     Betty      sub5

los append La función también puede tomar varios objetos -

import pandas as pd

one = pd.DataFrame({
   'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
   'subject_id':['sub1','sub2','sub4','sub6','sub5'],
   'Marks_scored':[98,90,87,69,78]},
   index=[1,2,3,4,5])

two = pd.DataFrame({
   'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
   'subject_id':['sub2','sub4','sub3','sub6','sub5'],
   'Marks_scored':[89,80,79,97,88]},
   index=[1,2,3,4,5])
print one.append([two,one,two])

Sus output es como sigue -

Marks_scored   Name    subject_id
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5
1           98     Alex          sub1
2           90      Amy          sub2
3           87    Allen          sub4
4           69    Alice          sub6
5           78   Ayoung          sub5
1           89    Billy          sub2
2           80    Brian          sub4
3           79     Bran          sub3
4           97    Bryce          sub6
5           88    Betty          sub5

Series de tiempo

Pandas proporciona una herramienta sólida para el tiempo de trabajo con datos de series temporales, especialmente en el sector financiero. Al trabajar con datos de series de tiempo, con frecuencia nos encontramos con lo siguiente:

  • Generando secuencia de tiempo
  • Convierta la serie temporal a diferentes frecuencias.

Pandas proporciona un conjunto de herramientas relativamente compacto y autónomo para realizar las tareas anteriores.

Obtener la hora actual

datetime.now() le da la fecha y hora actual.

import pandas as pd

print pd.datetime.now()

Sus output es como sigue -

2017-05-11 06:10:13.393147

Crear una marca de tiempo

Los datos con marcas de tiempo son el tipo más básico de datos de series temporales que asocian valores con puntos en el tiempo. Para los objetos pandas, significa usar los puntos en el tiempo. Tomemos un ejemplo:

import pandas as pd

print pd.Timestamp('2017-03-01')

Sus output es como sigue -

2017-03-01 00:00:00

También es posible convertir tiempos de época enteros o flotantes. La unidad predeterminada para estos son nanosegundos (ya que así es como se almacenan las marcas de tiempo). Sin embargo, a menudo las épocas se almacenan en otra unidad que se puede especificar. Tomemos otro ejemplo

import pandas as pd

print pd.Timestamp(1587687255,unit='s')

Sus output es como sigue -

2020-04-24 00:14:15

Crea un rango de tiempo

import pandas as pd

print pd.date_range("11:00", "13:30", freq="30min").time

Sus output es como sigue -

[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]

Cambiar la frecuencia del tiempo

import pandas as pd

print pd.date_range("11:00", "13:30", freq="H").time

Sus output es como sigue -

[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]

Conversión a marcas de tiempo

Para convertir una serie o un objeto similar a una lista de objetos similares a una fecha, por ejemplo, cadenas, épocas o una mezcla, puede utilizar to_datetimefunción. Cuando se pasa, devuelve una serie (con el mismo índice), mientras que unalist-like se convierte en un DatetimeIndex. Eche un vistazo al siguiente ejemplo:

import pandas as pd

print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))

Sus output es como sigue -

0  2009-07-31
1  2010-01-10
2         NaT
dtype: datetime64[ns]

NaT medio Not a Time (equivalente a NaN)

Tomemos otro ejemplo.

import pandas as pd

print pd.to_datetime(['2005/11/23', '2010.12.31', None])

Sus output es como sigue -

DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)