Python-pandas-concatenation
Pythonパンダ-連結
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 = 1* に沿って2つのオブジェクトを追加する必要がある場合、新しい列が追加されます。
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インスタンスメソッドです。 これらのメソッドは、実際に連結に先行していました。 彼らは*軸= 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
*append* 関数も複数のオブジェクトを取得できます-
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, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]
時間の頻度を変更する
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を返しますが、 list-like は 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* は、 *Not a Time* (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)