Pandas Python - Concaténation

Pandas fournit diverses installations pour se combiner facilement Series, DataFrame, et Panel objets.

pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
  • objs - Il s'agit d'une séquence ou d'un mappage d'objets Series, DataFrame ou Panel.

  • axis - {0, 1, ...}, par défaut 0. Il s'agit de l'axe à concaténer.

  • join- {'interne', 'externe'}, par défaut 'externe'. Comment gérer les index sur d'autres axes. Extérieur pour union et intérieur pour intersection.

  • ignore_index- booléen, False par défaut. Si True, n'utilisez pas les valeurs d'index sur l'axe de concaténation. L'axe résultant sera étiqueté 0, ..., n - 1.

  • join_axes- Ceci est la liste des objets Index. Index spécifiques à utiliser pour les autres (n-1) axes au lieu d'exécuter une logique d'ensemble interne / externe.

Concaténation d'objets

le concatfunction fait tout le gros du travail des opérations de concaténation le long d'un axe. Créons différents objets et faisons la concaténation.

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

Ses output est comme suit -

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

Supposons que nous voulions associer des clés spécifiques à chacun des morceaux du DataFrame découpé. Nous pouvons le faire en utilisant lekeys argument -

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

Ses output est comme suit -

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'index de la résultante est dupliqué; chaque index est répété.

Si l'objet résultant doit suivre sa propre indexation, définissez ignore_index à 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)

Ses output est comme suit -

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

Observez, l'index change complètement et les clés sont également remplacées.

Si deux objets doivent être ajoutés le long axis=1, puis les nouvelles colonnes seront ajoutées.

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)

Ses output est comme suit -

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

Concaténation à l'aide d'ajout

Les méthodes d'instance d'ajout sur Series et DataFrame sont un raccourci utile pour concaténer. Ces méthodes étaient en fait antérieures à concat. Ils s'enchaînentaxis=0, à savoir 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)

Ses output est comme suit -

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

le append la fonction peut également prendre plusieurs objets -

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

Ses output est comme suit -

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

Des séries chronologiques

Les pandas fournissent un outil robuste pour le temps de travail avec des données de séries chronologiques, en particulier dans le secteur financier. En travaillant avec des données de séries chronologiques, nous rencontrons fréquemment les éléments suivants

  • Générer une séquence de temps
  • Convertir la série chronologique en différentes fréquences

Pandas fournit un ensemble d'outils relativement compact et autonome pour effectuer les tâches ci-dessus.

Obtenir l'heure actuelle

datetime.now() vous donne la date et l'heure actuelles.

import pandas as pd

print pd.datetime.now()

Ses output est comme suit -

2017-05-11 06:10:13.393147

Créer un horodatage

Les données horodatées sont le type le plus élémentaire de données chronologiques qui associent des valeurs à des points dans le temps. Pour les objets pandas, cela signifie utiliser les points dans le temps. Prenons un exemple -

import pandas as pd

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

Ses output est comme suit -

2017-03-01 00:00:00

Il est également possible de convertir des temps d'époque entiers ou flottants. L'unité par défaut pour ceux-ci est les nanosecondes (puisque c'est ainsi que les horodatages sont stockés). Cependant, les époques sont souvent stockées dans une autre unité qui peut être spécifiée. Prenons un autre exemple

import pandas as pd

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

Ses output est comme suit -

2020-04-24 00:14:15

Créer une plage de temps

import pandas as pd

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

Ses output est comme suit -

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

Changer la fréquence du temps

import pandas as pd

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

Ses output est comme suit -

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

Conversion en horodatages

Pour convertir une série ou un objet de type liste d'objets de type date, par exemple des chaînes, des époques ou un mélange, vous pouvez utiliser le to_datetimefonction. Une fois passé, cela renvoie une série (avec le même index), tandis qu'unlist-like est converti en DatetimeIndex. Jetez un œil à l'exemple suivant -

import pandas as pd

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

Ses output est comme suit -

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

NaT veux dire Not a Time (équivalent à NaN)

Prenons un autre exemple.

import pandas as pd

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

Ses output est comme suit -

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