前提・実現したい事
Pythonのmerge関数とif文を用いてデータ構造ごとにmergeの処理を変えるプログラムを実装したいと思っています。
デーダフレイム(df2)に"品種名"というコラムがある場合には、この"品種名"というコラムを削除したうえで、指定した結合をする、ない場合はそのまま結合する。というようなコードを実装したいのですが、下記の実装例①はちゃんと実装できたのですが、②の場合で上手く実装できません。
① df1とdf2の結合の際にNaN値が発生するが、コラムは全て一致する場合
python3
1df1 = pd.DataFrame({'Label':['img061c.jpg', 'img061c.jpg', 'img061c.jpg',...,'img062c.jpg','img062c.jpg','img062c.jpg',...,'img063c.jpg','img063c.jpg','img063c.jpg',...,'img064c.jpg','img064c.jpg','img064c.jpg']}) 2# Label 3# img061c 4# img061c 5# img061c 6# .... 7# img062c 8# img062c 9# img062c 10# .... 11# img063c 12# img063c 13# img063c 14# .... 15# img064c 16# img064c 17# img064c
python3
1df2 = pd.DataFrame({'PictureNumber':['img061c.jpg', 'img062c.jpg', 'img063c.jpg',"img067c.jpg"], 'SumpleNumber':['くるみ豆', '金持ち豆', '秘伝豆',"きさらぎ"], 'BeenNumber':['B2', 'B3', 'B4',"B8"]}) 2# PictureNumber SumpleNunber BeenNumber 3# img061c くるみ豆 B2 4# img062c 金持ち豆 B3 5# img063c 秘伝豆 B4 6# img067c きさらぎ B8
python3
1def Merging (df1,df2): 2 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1) 3 if df3['Sumple'].isnull().any(): 4 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer') 5 return df3 6 Label PictureNumber SumpleNumber BeenNumber 7# img061c.jpg img061c.jpg くるみ豆 B2 8# img061c.jpg img061c.jpg くるみ豆 B2 9# img061c.jpg img061c.jpg くるみ豆 B2 10# .... .... .... .... 11# img062c.jpg img062c.jpg 金持ち豆 B3 12# img062c.jpg img062c.jpg 金持ち豆 B3 13# img062c.jpg img062c.jpg 金持ち豆 B3 14# .... .... .... .... 15# img063c.jpg img063c.jpg 秘伝豆 B4 16# img063c.jpg img063c.jpg 秘伝豆 B4 17# img063c.jpg img063c.jpg 秘伝豆 B4 18# .... .... .... .... 19# img064c.jpg NaN NaN B7 20# .... .... .... .... 21# NaN img067c.jpg きさらぎ B8
② df1とdf2の結合の際にNaN値が発生し、コラムが一致しない場合
python3
1df1 = pd.DataFrame({'Label':['img061c.jpg', 'img061c.jpg', 'img061c.jpg',...,'img062c.jpg','img062c.jpg','img062c.jpg',...,'img063c.jpg','img063c.jpg','img063c.jpg',...,'img064c.jpg','img064c.jpg','img064c.jpg']}) 2# Label 3# img061c 4# img061c 5# img061c 6# .... 7# img062c 8# img062c 9# img062c 10# .... 11# img063c 12# img063c 13# img063c 14# .... 15# img064c 16# img064c 17# img064c
python3
1df2 = pd.DataFrame({'PictureNumber':['img061c.jpg', 'img062c.jpg', 'img063c.jpg',"img067c.jpg"], 'SumpleNumber':['くるみ豆', '金持ち豆', '秘伝豆',"きさらぎ"], 'BeenNumber':['B2', 'B3', 'B4',"B8"]}) 2# PictureNumber SumpleNunber BeenNumber 品種名 3# img061c くるみ豆 B2 4# img062c 金持ち豆 B3 5# img063c 秘伝豆 B4 6# img067c きさらぎ B8
python3
1def Merging (df1,df2): 2 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1) 3 if df3['Sumple'].isnull().any()."品種名" in df3.columns: 4 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop("品種名",axis=1).drop('PictureNumber', axis=1) 5 elif df3['Sumple'].isnull().any()."品種名" not in df3.columns: 6 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop('PictureNumber', axis=1) 7 return df3 8 Label PictureNumber SumpleNumber BeenNumber 9# img061c.jpg img061c.jpg くるみ豆 B2 10# img061c.jpg img061c.jpg くるみ豆 B2 11# img061c.jpg img061c.jpg くるみ豆 B2 12# .... .... .... .... 13# img062c.jpg img062c.jpg 金持ち豆 B3 14# img062c.jpg img062c.jpg 金持ち豆 B3 15# img062c.jpg img062c.jpg 金持ち豆 B3 16# .... .... .... .... 17# img063c.jpg img063c.jpg 秘伝豆 B4 18# img063c.jpg img063c.jpg 秘伝豆 B4 19# img063c.jpg img063c.jpg 秘伝豆 B4 20# .... .... .... .... 21# img064c.jpg NaN NaN B7 22# .... .... .... .... 23# NaN img067c.jpg きさらぎ B8
発生している問題・エラーメッセージ
File "<ipython-input-41-be1b7423ae12>", line 3 if df3['Sumple'].isnull().any()."品種名" in df3.columns: ^ SyntaxError: invalid syntax
実際に書いたコード
Python3
1def Merging (df1,df2): 2 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1) 3 if df3['Sumple'].isnull().any()."品種名" in df3.columns: 4 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop("品種名",axis=1).drop('PictureNumber', axis=1) 5 elif df3['Sumple'].isnull().any()."品種名" not in df3.columns: 6 df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop('PictureNumber',
参考にしたサイト
http://nekoyukimmm.hatenablog.com/entry/2015/04/10/133917
https://teratail.com/questions/191326
補足情報(FW/ツールのバージョンなど)
Anaconda
Python
Pycharm
お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/22 08:40