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

Pandas串联

Esempio di operazione di connessione di Pandas

Pandas fornisce diverse funzionalità che consentono di combinare facilmente Series, DataFrame e oggetti Panel.

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

objs − È una sequenza di Series o mappatura, DataFrame o oggetto Panel. axis − {0, 1, ...}, predefinito a 0. È l'asse da connettere. join − {'interno', 'esterno'}, predefinito a 'esterno'. Come gestire gli indici degli altri assi. Esterno è l'unione, interno è la croce. ignore_index − Valore booleano, predefinito a False. Se impostato su True, non utilizzare i valori di indice sull'asse di connessione. L'asse di risultato sarà etichettato come 0, ..., n-1. join_axes − È una lista di oggetti di indice. Utilizzata per l'indice specifico degli altri assi (n-1), non per eseguire la logica di impostazione interna/esterna.

Oggetto di connessione

La funzione CONCAT esegue tutte le operazioni di connessione lungo l'asse. Creiamo oggetti diversi e connettiamoli.

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

运行结果如下:

    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 che vogliamo associare chiavi specifiche a ciascuna porzione del DataFrame spezzato. Possiamo farlo utilizzando il parametro keys-

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

运行结果如下:

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 dei risultati è duplicato; ogni indice è duplicato.

Se l'oggetto dei risultati deve seguire il proprio indice, impostare ignore_index su 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))

运行结果如下:

    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

Attenzione, l'indice viene completamente modificato e anche le chiavi vengono sovrascritte.

Se si desidera aggiungere due oggetti lungo axis = 1, verranno aggiunte nuove colonne.

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

运行结果如下:

    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

Utilizzo di append per concatenare

Il modo rapido di usare Concat è tramite i metodi di appendimento su Series e DataFrame. Questi metodi sono in realtà precedenti a concat. Connessione lungo l'asse = 0, ossia 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)))

运行结果如下:

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

Questa funzione aggiuntiva può accettare più oggetti, e-

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

运行结果如下:

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

sequenza temporale

Pandas fornisce strumenti potenti per gestire i dati sequenziali, specialmente nel campo finanziario. Quando si lavora con dati sequenziali, spesso ci si incontra con le seguenti situazioni:

genera un'ordine temporale converti una serie temporale in una frequenza diversa

fornisce un set di strumenti relativamente compatti e indipendenti per eseguire le suddette operazioni.

ottieni l'ora attuale

datetime.now()fornisci la data e l'ora attuale.

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

运行结果如下:

2017-05-11 06:10:13.393147

crea un timestamp

Il tipo di dati timestamp è il tipo di dati sequenziale più fondamentale che associ un valore a un punto temporale. Per gli oggetti Pandas, questo significa utilizzare il punto temporale. Facciamo un esempio -

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

运行结果如下:

2017-03-01 00:00:00

puoi anche convertire numeri interi o decimali come tempo. Il loro unità predefinita è nanosecondi (poiché è il modo in cui vengono memorizzati i timestamp). Tuttavia, di solito si memorizza l'era in un'altra unità specificabile. Ecco un altro esempio

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

运行结果如下:

 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)

运行结果如下:

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

modifica la frequenza di tempo

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

运行结果如下:

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

转换为时间戳

若要将类似日期的对象的系列或类似列表的对象(例如字符串,历元或混合)转换,可以使用to_datetime函数。传递时,将返回一个Series(具有相同的索引),而类似列表的列表将转换为DatetimeIndex。看下面的实例-

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

运行结果如下:

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

NaT表示非时间(相当于NaN)

让我们再举一个例子。

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

运行结果如下:

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