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)