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