Python Pandas - Concatenazione
Pandas fornisce vari servizi per combinare facilmente insieme Series, DataFrame, e Panel oggetti.
pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
objs - Questa è una sequenza o mappatura di oggetti Series, DataFrame o Panel.
axis - {0, 1, ...}, valore predefinito 0. Questo è l'asse da concatenare.
join- {"interno", "esterno"}, predefinito "esterno". Come gestire gli indici su altri assi. Esterno per unione e interno per intersezione.
ignore_index- booleano, valore predefinito False. Se True, non utilizzare i valori di indice sull'asse di concatenazione. L'asse risultante sarà etichettato 0, ..., n - 1.
join_axes- Questo è l'elenco degli oggetti Indice. Indici specifici da utilizzare per gli altri (n-1) assi invece di eseguire la logica dell'insieme interno / esterno.
Oggetti concatenati
Il concatfunzione fa tutto il lavoro pesante di eseguire operazioni di concatenazione lungo un asse. Creiamo oggetti diversi e concateniamo.
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])
Suo output è il seguente -
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
Supponiamo di voler associare chiavi specifiche a ciascuno dei pezzi del DataFrame sminuzzato. Possiamo farlo usando ilkeys argomento -
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'])
Suo output è il seguente -
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
L'indice della risultante viene duplicato; ogni indice viene ripetuto.
Se l'oggetto risultante deve seguire la propria indicizzazione, impostare ignore_index per 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)
Suo output è il seguente -
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
Osserva, l'indice cambia completamente e anche le chiavi vengono sovrascritte.
Se è necessario aggiungere due oggetti insieme axis=1, quindi le nuove colonne verranno aggiunte.
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)
Suo output è il seguente -
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
Concatenazione tramite append
Una scorciatoia utile per concatenare sono i metodi di istanza di accodamento su Series e DataFrame. Questi metodi erano effettivamente precedenti a concat. Si concatenanoaxis=0, vale a dire l'indice -
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)
Suo output è il seguente -
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
Il append la funzione può anche accettare più oggetti -
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])
Suo output è il seguente -
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
Serie storica
I panda forniscono uno strumento affidabile per l'orario di lavoro con i dati delle serie temporali, soprattutto nel settore finanziario. Mentre lavoriamo con i dati delle serie temporali, riscontriamo spesso quanto segue:
- Generazione della sequenza temporale
- Converti le serie temporali in frequenze diverse
Pandas fornisce un set di strumenti relativamente compatto e autonomo per eseguire le attività di cui sopra.
Ottieni l'ora corrente
datetime.now() fornisce la data e l'ora correnti.
import pandas as pd
print pd.datetime.now()
Suo output è il seguente -
2017-05-11 06:10:13.393147
Crea un TimeStamp
I dati con data e ora sono il tipo più elementare di dati della serie temporale che associa valori a punti nel tempo. Per gli oggetti panda, significa usare i punti nel tempo. Facciamo un esempio:
import pandas as pd
print pd.Timestamp('2017-03-01')
Suo output è il seguente -
2017-03-01 00:00:00
È anche possibile convertire i tempi di epoch interi o float. L'unità predefinita per questi è nanosecondi (poiché questi sono il modo in cui vengono memorizzati i timestamp). Tuttavia, spesso le epoche vengono memorizzate in un'altra unità che può essere specificata. Facciamo un altro esempio
import pandas as pd
print pd.Timestamp(1587687255,unit='s')
Suo output è il seguente -
2020-04-24 00:14:15
Crea un intervallo di tempo
import pandas as pd
print pd.date_range("11:00", "13:30", freq="30min").time
Suo output è il seguente -
[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]
Cambia la frequenza del tempo
import pandas as pd
print pd.date_range("11:00", "13:30", freq="H").time
Suo output è il seguente -
[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]
Conversione in timestamp
Per convertire una serie o un oggetto simile a un elenco di oggetti simili a una data, ad esempio stringhe, epoche o una combinazione, è possibile utilizzare il to_datetimefunzione. Quando viene passato, restituisce una serie (con lo stesso indice), mentre alist-like viene convertito in un file DatetimeIndex. Dai un'occhiata al seguente esempio:
import pandas as pd
print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))
Suo output è il seguente -
0 2009-07-31
1 2010-01-10
2 NaT
dtype: datetime64[ns]
NaT si intende Not a Time (equivalente a NaN)
Facciamo un altro esempio.
import pandas as pd
print pd.to_datetime(['2005/11/23', '2010.12.31', None])
Suo output è il seguente -
DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)