パンダのマージ、スプライス、コンバイン
異なる場所にあるデータソースを統一されたデータ構造に統合し、属性を追加し、サンプルを追加します。
マージ merge()
公式ドキュメントへのリンク
構文です。
pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True、 indicator=False、 validate=None)を実行。
パラメータです。
- を左にします。 データフレーム
- の右側です。 データフレーム
- どのように 接続方法, 'left', 'right', 'outer', 'inner ', デフォルト 'inner'.
- をオンにします。 ラベルまたはリスト。結合キーを指定し、複数のキーを指定することができます。 none または次の4つのパラメータを使用しない場合、両側の重複する列はすべてこのキーで結合されます。
- left_on. ラベルまたはリスト、または配列のようなもの。左結合のキーを指定します、複数のキーを指定することができます。
- right_on. ラベルまたはリスト、または配列のようなものです。右側の結合キーを指定します。複数のキーを指定できます。
- left_indexを指定します。 ブール値、デフォルトは False。Trueは、左側のデータボックスが結合キーとしてインデックスを持ち、それがマルチレベルインデックスである場合、右側も同じレベルである必要があることを意味します。
- right_index. ブール値、デフォルトは False。Trueは、右側のデータボックスがインデックスを結合キーとして持つことを意味する
- をソートします。 ブール値、デフォルトは False。Trueは連結されたキーでソートすることを意味する
- サフィックスを使用します。 タプル(str, str)、デフォルト('_x', '_y')。マージされたものに重複するカラムがある場合、それらを別々にサフィックスする。suffixes=(False, False)の場合、カラムが重複している場合は例外を発生させる。
- をコピーしてください。 ブール値、デフォルトはFalseです。
- インジケータを使用します。 boolまたはstr、デフォルトFalse。行がレコードの左側からか右側からかを示す新しい列 "_merge"(デフォルト、指定可能)を追加する、orboth。
-
を検証します。
str, オプション。キーが重複しているかどうかを検出します。
- 1:1」は、両方の結合キーが重複した値を持つことができないことを意味し、それ以外の場合はエラーが報告される
- 1:m」は、左側の結合キーが重複した値を持つことができないことを意味し、そうでない場合はエラーが報告されます。
- 'm:1' は右側の連結キーが重複してはいけないことを意味し、そうでない場合はエラーが報告される
- m:m' は、連結キーの両方が重複した値を持つ可能性があることを意味します。
注意事項 left_on, right_on と left_index, right_index は混在可能です。
df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'], 'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'], 'value': [5, 6, 7, 8]})
df1
lkey value
0 foo 1
1 bar 2
2 baz 3
3 foo 5
df2
rkey value
0 foo 5
1 bar 6
2 baz 7
3 foo 8
pd.merge(df1, df2, left_on='lkey', right_on='rkey', suffixes=('_left', '_right'))
lkey value_left rkey value_right
0 foo 1 foo 5
1 foo 1 foo 8
2 foo 5 foo 5
3 foo 5 foo 8
4 bar 2 bar 6
5 baz 3 baz 7
>>> df1.merge(df2, left_on='lkey', right_on='rkey', suffixes=(False, False))
Traceback (most recent call last):
...
ValueError: columns overlap but no suffix specified:
Index(['value'], dtype='object')
スプライス concat()
シンタックス
pandas.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
使用する。
使用するには、DataFrameまたはSeriesが同じインデックス構造(レベル数)を持つ必要があります。軸を使用して、縦方向(サンプルを追加する)または横方向(行インデックスを使用して結合)のどちらで縫合するかを指定します。結合を使用して、外部または内部で結合するかを指定します。キーを使用して新しい階層的インデックスを追加し、objsのオブジェクトごとに1つ生成します。
パラメータです。
objs.
接続するDataFrameとSeriesのオブジェクトをリストまたは辞書として渡します。辞書として渡された場合、パラメータのキーの使い方が関係してきますので、以下を参照してください。
の軸になります。
{0/'index', 1/'columns'}, デフォルトは0です。垂直方向に連結、または水平方向に連結
を結合します。
{'inner', 'outer'}, デフォルトは 'outer' です。内側または外側join
ignore_index.
ブール値、デフォルトは False。既存のインデックスを無視し、インデックス0、1、2......に対して新しいシングルレベルインデックスを生成するかどうか。
キーになります。
新しいインデックスを生成します。
の名前になります。
リスト、デフォルトは None。新しく生成されたマルチレベル・インデックスに名前を付けるには、次の例を追加します。
verify_integrity です。
新しい連結軸に重複が含まれているかどうかをチェックします。これは、実際のデータ連結に対して非常に高価になる場合があります。
fra1 = pd.DataFrame(np.array([[25, 70], [40, 80], [15, 40], [20, 65]]), index=['a', 'b', 'c', 'd'], columns=['age', 'weight'])
fra2 = pd.DataFrame(np.array([[20, 60], [15, 80], [40, 100], [60, 50]]), index=['c', 'd', 'e', 'f'], columns=['age', 'height'])
ser = pd.Series([165, 170, 180, 158], index=['c', 'd', 'e', 'f'])
ser.name = 'size'
fra1
Out[74]:
age weight
a 25 70
b 40 80
c 15 40
d 20 65
fra2
Out[75]:
age height
c 20 60
d 15 80
e 40 100
f 60 50
ser
Out [76]:
c 165
d 170
e 180
f 158
Name: size, dtype: int64
# horizontal splice, outer join, set new level index
pd.concat([fra1, fra2, ser], axis=1, join='outer', keys=['fra1', 'fra2', 'ser'], names=['level0', 'level1'])
Out[77]:
level0 fra1 fra2 ser
level1 age weight age height size
a 25.0 70.0 NaN NaN NaN
b 40.0 80.0 NaN NaN NaN
c 15.0 40.0 20.0 60.0 165.0
d 20.0 65.0 15.0 80.0 170.0
e NaN NaN 40.0 100.0 180.0
f NaN NaN 60.0 50.0 158.0
#internal connection
pd.concat([fra1, fra2, ser], axis=1, join='inner', keys=['fra1', 'fra2', 'ser'], names=['level0', 'level1'])
Out[78]:
level0 fra1 fra2 ser
level1 age weight age height size
c 15 40 20 60 165
d 20 65 15 80 170
#One way to write it is to omit the keys parameter
pd.concat({'fra1':fra1, 'fra2':fra2, 'ser':ser}, axis=1, join='inner', names=['level0', 'level1'])
Out[83]:
level0 fra1 fra2 ser
level1 age weight age height size
c 15 40 20 60 165
d 20 65 15 8
<イグ
combocombine_first()
シンタックス
fra1.combine_first(fra2)
使用する。
fra1のNaN要素をfra2の同じ位置(インデックス位置を意味する)の非NaN要素で埋めます。両者のインデックスを全て含み、NaNを用いて欠損要素(片方にしか存在しない場合、一部の行インデックスが欠損)を埋めた新しいDataFrameオブジェクトを取得します。 fraはSeriesも可能です。
fra1 = pd.DataFrame(np.array([[25, 70], [40, 80], [15, np.NaN], [np.NaN, 65]]), index=['a', 'b', 'c', 'd'], columns=['age', 'weight'])
fra2 = pd.DataFrame(np.array([[20, 60], [15, 80], [np.NaN, 100], [60, 50]]), index=['c', 'd', 'e', 'f'], columns=['age', 'height'])
fra1
Out[24]:
age weight
a 25.0 70.0
b 40.0 80.0
c 15.0 NaN
d NaN 65.0
fra2
Out [25]:
age height
c 20.0 60.0
d 15.0 80.0
e NaN 100.0
f 60.0 50.0
fra1.combine_first(fra2)
Out[26]:
age height weight
a 25.0 NaN 70.0
b 40.0 NaN 80.0
c 15.0 60.0 NaN
d 15.0 80.0 65.0
e NaN 100.0 NaN
f 60.0 50.0 NaN
関連
-
[解決済み] PythonのUnorderable Typeエラーの意味とは?
-
[解決済み] numpy配列の要素をシフトする
-
[解決済み] PyTorchのマルチプロセッシングを利用するには?
-
[解決済み] Numpyのゼロ除算がnp.where()のtrue_divideで発生した。
-
[解決済み] Pythonテキストメニューの無限ループ
-
[解決済み] パイソン 複数の関数を同時に実行する
-
python3 reports AttributeError: モジュール 'sys' has no attribute 'setdefaultencoding'.
-
Pythonワードクラウドの実装
-
[解決済み] for _ in range() [重複]の意味を教えてください。
-
[解決済み] Pythonで2to3を正しく使うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】TypeError: エンコードされていない文字列引数
-
[解決済み】ヒストグラムプロット "AttributeError: max must be larger than min in range parameter."
-
[解決済み] Virtualenv OSError - setuptools pip wheel failed with error code 1
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] PIPインストールで、libffiは認識されるのに、ffi.hが見つからない。
-
[解決済み] tensorflowの読み込みエラー - "cudart64_80.dll "が見つかりませんでした。
-
pandasのmerge, join, concatの違いに関する実践的な解説
-
[解決済み] iPython notebook の PySpark で count() と first() を使用すると Py4JJavaError が発生する。
-
[解決済み] シーケンスと'float'型の非インテリジェンスとの乗算ができません。