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

Pandas 連結

Pandasの結合操作の例

Pandasは、Series、DataFrame、Panelオブジェクトを簡単に組み合わせるためのさまざまな機能を提供します。

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

objs − これはSeriesのシーケンスまたはマップ、DataFrameまたはPanelオブジェクトです。 axis − {0、1、...}、デフォルトは0です。結合する軸です。 join − {'inner','outer'}、デフォルトは'outer'です。他の軸のインデックスをどのように処理するかです。外部は結合、内部は交差点です。 ignore_index − ブール値、デフォルトはFalseです。Trueの場合、結合軸上でインデックス値を使用しないでください。結果軸は0、...、nでマークされます...-1。 join_axes − これはインデックスオブジェクトのリストです。他の(n-1)は、内部ではなく特定の軸のインデックスを使用します。/外部設定ロジック。

結合オブジェクト

このCONCAT関数は、沿轴线に対するすべての結合操作を担当します。異なるオブジェクトを作成して結合してみましょう。

 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

特定のキーをスライスされたDataFrameの各スライスに関連付けることを想像してみましょう。これを達成するために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

結果のインデックスは重複しています;各インデックスが重複しています。

結果オブジェクトが自分自身のインデックスに従う必要がある場合、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))

実行結果は以下の通りです:

    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

注意、インデックスが完全に変更され、キーも上書きされます。

axis=に沿って結合する必要がある場合、 12つのオブジェクトを追加すると、新しい列が追加されます。

 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

appendを使って連結

Concatの便利なショートカットはSeriesとDataFrameのappendインスタンスメソッドです。これらのメソッドは実際にはconcatよりも前に存在しました。これらは軸=0に沿って結合します、つまりインデックス-

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

この追加機能は、複数のオブジェクトを取り込むことができますおよび-

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

時系列

Pandasは、特に金融分野での時系列データの処理に強力なツールを提供しています。時系列データを処理する際には、以下のような状況に直面することがよくあります:

時間順序を生成します 時系列を異なる周波数に変換します

これらのタスクを実行するための非常にコンパクトで独立したツールセットを提供します。

現在の時間を取得します

datetime.now()現在の日付と時間を提供します。

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

実行結果は以下の通りです:

2017-05-11 06:10:13.393147

タイムスタンプを作成します

タイムスタンプデータは、値と時間点を関連付ける時系列データの最も基本的な形式です。パンダオブジェクトの場合、これは時間点を使用することを意味します。一例を示します-

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

実行結果は以下の通りです:

2017-03-01 00:00:00

もしくは整数や浮動小数点時間を変換することもできます。これらのデフォルトの単位はナノ秒(これはタイムスタンプの保存方法です)ですが、通常はエポックを指定可能な別の単位で保存します。一例を示します

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

実行結果は以下の通りです:

 2020-04-24 00:14:15

作成時間範囲

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

実行結果は以下の通りです:

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

時間頻度を変更

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-3164[ns]