Python Pandas - Concatenação

Pandas oferece várias facilidades para combinar facilmente Series, DataFrame, e Panel objetos.

pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
  • objs - Esta é uma sequência ou mapeamento de objetos Series, DataFrame ou Panel.

  • axis - {0, 1, ...}, padrão 0. Este é o eixo ao longo do qual concatenar.

  • join- {'interno', 'externo'}, padrão 'externo'. Como lidar com índices em outro (s) eixo (s). Externo para união e interno para interseção.

  • ignore_index- booleano, padrão False. Se for True, não use os valores de índice no eixo de concatenação. O eixo resultante será rotulado 0, ..., n - 1.

  • join_axes- Esta é a lista de objetos de índice. Índices específicos a serem usados ​​para os outros (n-1) eixos em vez de realizar a lógica de definição interna / externa.

Objetos Concatenados

o concatA função faz todo o trabalho pesado de realizar operações de concatenação ao longo de um eixo. Vamos criar objetos diferentes e fazer concatenação.

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])

Está output é o seguinte -

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

Suponha que desejamos associar chaves específicas a cada uma das partes do DataFrame fragmentado. Podemos fazer isso usando okeys 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'])

Está output é o seguinte -

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

O índice do resultante é duplicado; cada índice é repetido.

Se o objeto resultante tiver que seguir sua própria indexação, defina ignore_index para 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)

Está output é o seguinte -

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, o índice muda completamente e as Chaves também são substituídas.

Se dois objetos precisam ser adicionados junto axis=1, então as novas colunas serão anexadas.

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)

Está output é o seguinte -

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

Concatenando usando append

Um atalho útil para concat são os métodos de instância de acréscimo em Series e DataFrame. Na verdade, esses métodos são anteriores ao concat. Eles se concatenam juntoaxis=0, ou seja, o í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)

Está output é o seguinte -

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

o append função pode levar vários objetos também -

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])

Está output é o seguinte -

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

Série Temporal

O Pandas fornece uma ferramenta robusta para o tempo de trabalho com dados de séries temporais, especialmente no setor financeiro. Ao trabalhar com dados de série temporal, frequentemente encontramos o seguinte:

  • Gerando sequência de tempo
  • Converta a série temporal em diferentes frequências

O Pandas fornece um conjunto de ferramentas relativamente compacto e independente para executar as tarefas acima.

Obtenha a hora atual

datetime.now() fornece a data e a hora atuais.

import pandas as pd

print pd.datetime.now()

Está output é o seguinte -

2017-05-11 06:10:13.393147

Crie um TimeStamp

Os dados com registro de data e hora são o tipo mais básico de dados de série temporal que associa valores a pontos no tempo. Para objetos pandas, significa usar os pontos no tempo. Vamos dar um exemplo -

import pandas as pd

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

Está output é o seguinte -

2017-03-01 00:00:00

Também é possível converter tempos inteiros ou períodos flutuantes. A unidade padrão para isso é nanossegundos (já que é assim que os timestamps são armazenados). No entanto, muitas vezes as épocas são armazenadas em outra unidade que pode ser especificada. Vamos dar outro exemplo

import pandas as pd

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

Está output é o seguinte -

2020-04-24 00:14:15

Crie um intervalo de tempo

import pandas as pd

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

Está output é o seguinte -

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

Mudar a frequência de tempo

import pandas as pd

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

Está output é o seguinte -

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

Convertendo em carimbos de data / hora

Para converter uma série ou um objeto semelhante a uma lista de objetos semelhantes a uma data, por exemplo, strings, épocas ou uma mistura, você pode usar o to_datetimefunção. Quando passado, retorna uma série (com o mesmo índice), enquanto umlist-like é convertido em um DatetimeIndex. Dê uma olhada no seguinte exemplo -

import pandas as pd

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

Está output é o seguinte -

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

NaT significa Not a Time (equivalente a NaN)

Vamos dar outro exemplo.

import pandas as pd

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

Está output é o seguinte -

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