質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

22937閲覧

3つ以上のファイルの結合

kumer1

総合スコア26

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/18 05:10

編集2022/07/07 05:53

前提・実現したいこと

(本来ならSQLなのかも知れませんが、、)pythonでも2つ以上のファイルを読み込みリレーションを用いた集計で表示結果のように出力できないかと思い取り組みました。
merge()を使って2つのファイルはうまく出来たのですが、結合するファイルが3つになったら出来なくなりました。

name.csv

IdNameCity_idJob_id
1Jun11
2Alex14
3Hiro21
4Takako33
5Naoki42

city.csv

City_idCity
1NYC
2Izu
3Tokyo
4SF

job.csv

Job_idJob
1Neat
2Programmer
3Office Work
4Construction

表示結果

IdNameCityJob
01JunNYCNeat
12AlexNYCConstruction
23HiroIzuNeat
34TakakoTokyoOffice Work
45NaokiSFProgrammer

発生している問題・エラーメッセージ

Traceback (most recent call last): File "test.py", line 7, in <module> df4 = pd.merge(df1, df2, df3, how = 'inner', on = ['Job_id', 'City_id']) TypeError: merge() got multiple values for argument 'how'

該当のソースコード

Python3

1import csv 2import pandas as pd 3 4df1 = pd.read_csv("name.csv") 5df2 = pd.read_csv("job.csv") 6df3 = pd.read_csv("city.csv") 7df4 = pd.merge(df1, df2, df3, how = 'inner', on = ['Job_id', 'City_id']) 8df4 = df4.loc[:, ['Id', 'Name', 'City', 'Job']] 9print(df4)

試したこと

色々と調べたのですが、もしかしてmerge()じゃ3つ以上のファイルを一気に処理、出来ない??

補足情報(FW/ツールのバージョンなど)

MAC OS High Sierra
ver.10.13.6
Python 3.4.3
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

2つをマージした結果に、もう一つマージしていきましょう。
これを繰り返せばいくつでも可能になります

投稿2019/02/18 05:11

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

リファレンスを読みましょう

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.merge.html#pandas.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)

3つ目の引数は how です。
ご自身の指摘にもあるように、3つ以上のデータフレームのマージは一度にはできません。2つずつマージしましょう。

投稿2019/02/18 05:15

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumer1

2019/02/18 05:20

因みに、一度にやるにはSQL系でDBを組むのが最適なのでしょうか?
mather

2019/02/18 05:26

最適、というのは状況によって変わります。 DBで管理されている情報であればクエリで結合した結果を出力するのが最適かと思いますが、そのためにわざわざDBを用意するほどでなければ良い選択肢とは言えない場合もあります。 一度にやる、といいますが一つのスクリプトで複数のテーブルをJOINするという見方で考えれば原理上はpandasとSQLとでは違いがないですよ? SQLでもテーブルAにテーブルBをJOINして、その出来上がったテーブルに更にテーブルCをJOINして…とやっているわけですから。
kumer1

2019/02/18 21:30

回答、ありがとうございます。色々勉強します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問