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)