English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Concatenación de Pandas

Pandas 连接的操作实例

Pandas提供了各种功能,可以轻松地将Series,DataFrame和Panel对象组合在一起。

 pd.concat(objs,axis=0,join='outer',join_axes=None,
 ignore_index=False)

objs − 这是Series的序列或映射,DataFrame或Panel对象。 axis − {0,1,...},默认为0。这是要串联的轴。 join − {'inner','outer'},默认为'outer'。如何处理其他轴上的索引。外部为联合,内部为交叉。 ignore_index − 布尔值,默认为False。如果为True,则不要在串联轴上使用索引值。结果轴将标记为0,...,n-1。 join_axes − 这是索引对象的列表。用于其他(n-1)轴的特定索引,而不是执行内部/外部设置逻辑。

连接对象

该CONCAT函数执行所有沿轴线进行联接操作的重任。让我们创建不同的对象并进行串联。

 import pandas as pd
 one = pd.DataFrame({
    'Nombre': ['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({
    'Nombre': ['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])))

Resultados de ejecución como se muestra a continuación:

    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 queremos asociar claves específicas con cada fragmento de DataFrame cortado. Podemos hacerlo utilizando el parámetro keys-

 import pandas as pd
 one = pd.DataFrame({
    'Nombre': ['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({
    'Nombre': ['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']))

Resultados de ejecución como se muestra a continuación:

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 del resultado es repetido; cada índice se repite.

Si el objeto resultante debe seguir su propio índice, configure ignore_index como True.

 import pandas as pd
 one = pd.DataFrame({
    'Nombre': ['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({
    'Nombre': ['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))

Resultados de ejecución como se muestra a continuación:

    Marks_scored Nombre id_materia
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

Nota: el índice se cambia completamente y también se sobrescribe la clave.

Si es necesario seguir el eje = 1Al agregar dos objetos, se agregarán nuevas columnas.

 import pandas as pd
 one = pd.DataFrame({
    'Nombre': ['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({
    'Nombre': ['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))

Resultados de ejecución como se muestra a continuación:

    Marks_scored Nombre id_materia Marks_scored Nombre id_materia
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

Uso de append para concatenar

La forma rápida de concatenar utilizando append en Series y DataFrame es que estos métodos son en realidad anteriores a concat. Ellos se conectan a lo largo del eje = 0, es decir, el índice-

 import pandas as pd
 one = pd.DataFrame({
    'Nombre': ['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({
    'Nombre': ['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))

Resultados de ejecución como se muestra a continuación:

    Marks_scored Nombre id_materia
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

Esta función adicional puede tomar múltiples objetos, así como-

 import pandas as pd
 one = pd.DataFrame({
    'Nombre': ['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({
    'Nombre': ['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]))

Resultados de ejecución como se muestra a continuación:

    Marks_scored   Nombre    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

Serie temporal

Pandas ofrece una herramienta poderosa para manejar datos en serie, especialmente en el campo financiero. Al manejar datos en serie, a menudo nos encontramos con lo siguiente:

Generar una secuencia de tiempo Convertir series temporales a diferentes frecuencias

Ofrece una serie de herramientas compactas e independientes para realizar estas tareas.

Obtener la hora actual

datetime.now()Ofrecerle la fecha y hora actual.

 import pandas as pd
 print(pd.datetime.now())

Resultados de ejecución como se muestra a continuación:

2017-05-11 06:10:13.393147

Crear una marca de tiempo

Los datos de marca de tiempo son el tipo más básico de datos en serie que relacionan valores con puntos en el tiempo. Para objetos Pandas, esto significa usar puntos en el tiempo. Vamos a dar un ejemplo-

import pandas as pd
print(pd.Timestamp('2017-03-01))

Resultados de ejecución como se muestra a continuación:

2017-03-01 00:00:00

También se pueden convertir enteros o flotantes de tiempo. Por defecto, su unidad es nanosegundos (ya que es la forma en que se almacenan las marcas de tiempo). Sin embargo, por lo general, el eón se almacena en otra unidad que se puede especificar. Vamos a dar un ejemplo

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

Resultados de ejecución como se muestra a continuación:

 2020-04-24 00:14:15

rango de fechas de creación

import pandas as pd
print(pd.date_range("11:00", "13:3"0", freq="3).time)

Resultados de ejecución como se muestra a continuación:

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

Cambiar la frecuencia de tiempo

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

Resultados de ejecución como se muestra a continuación:

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

Convertir a timestamp

Si se desea convertir una serie de objetos de fecha similares o una lista similar a lista (por ejemplo, cadenas, tuplas o mezclas) al usar la función to_datetime, se puede utilizar la función to_datetime. Al pasar, se devolverá una serie (con el mismo índice), mientras que las listas similares a lista se convertirán en DatetimeIndex. Vea el siguiente ejemplo-

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

Resultados de ejecución como se muestra a continuación:

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

NaT representa no es tiempo (equivalente a NaN)

Vamos a dar otro ejemplo.

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

Resultados de ejecución como se muestra a continuación:

DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime'64[ns]