質問編集履歴

2

内容の明確化

2019/06/20 12:33

投稿

Danrussia
Danrussia

スコア44

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,216 @@
1
- ### 前提・実現したいこと
2
-
3
- Python3内で複数のファイル統合す際に、統合したファイルに特定のColmunsが
4
-
5
- ある場合とない場合で処理(結合方法を変え)を変えるコードを実装しよう思ってい
6
-
7
- (以下二つサイトを参考http://nekoyukimmm.hatenablog.com/entry/2015/04/10/133917,https://teratail.com/questions/191326)
8
-
9
-
10
-
11
- 上記のサイト2つを参考に自分で実装を試みたのですが、該当のソースコード3行目で文法的なエラーが出てしまい、解決できなかったので、Teratailの方で質問させて頂きました。
12
-
13
-
1
+ ### 前提・実現したい
2
+
3
+ Pythonのmerge関とif文を用いてデータ構造ごとにmerge処理変えプログラムを実装したいと思っています。
4
+
5
+ デーダフレイム(df2)に"品種名"というコラムがある場合には、この"品種名"いうコラムを削除したうえで、指定した結合をする、ない場合はそのまま結合。というようなコードを実装したいのですが、下記の実装例①はちゃん実装できたのですが、②の場合で上手く実装できせん
6
+
7
+ ###  ① df1とdf2結合の際にNaN値が発生するが、コラムは全て一致する場合
8
+
9
+ ```python3
10
+
11
+ df1 = 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']})
12
+
13
+ # Label
14
+
15
+ # img061c
16
+
17
+ # img061c
18
+
19
+ # img061c
20
+
21
+ # ....
22
+
23
+ # img062c
24
+
25
+ # img062c
26
+
27
+ # img062c
28
+
29
+ # ....
30
+
31
+ # img063c
32
+
33
+ # img063c
34
+
35
+ # img063c
36
+
37
+ # ....
38
+
39
+ # img064c
40
+
41
+ # img064c
42
+
43
+ # img064c
44
+
45
+ ```
46
+
47
+ ```python3
48
+
49
+ df2 = pd.DataFrame({'PictureNumber':['img061c.jpg', 'img062c.jpg', 'img063c.jpg',"img067c.jpg"], 'SumpleNumber':['くるみ豆', '金持ち豆', '秘伝豆',"きさらぎ"], 'BeenNumber':['B2', 'B3', 'B4',"B8"]})
50
+
51
+ # PictureNumber SumpleNunber BeenNumber
52
+
53
+ # img061c くるみ豆 B2
54
+
55
+ # img062c 金持ち豆 B3
56
+
57
+ # img063c 秘伝豆 B4
58
+
59
+ # img067c きさらぎ B8
60
+
61
+ ```
62
+
63
+ ```python3
64
+
65
+ def Merging (df1,df2):
66
+
67
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1)
68
+
69
+ if df3['Sumple'].isnull().any():
70
+
71
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer')
72
+
73
+ return df3
74
+
75
+ Label PictureNumber SumpleNumber BeenNumber
76
+
77
+ # img061c.jpg img061c.jpg くるみ豆 B2
78
+
79
+ # img061c.jpg img061c.jpg くるみ豆 B2
80
+
81
+ # img061c.jpg img061c.jpg くるみ豆 B2
82
+
83
+ # .... .... .... ....
84
+
85
+ # img062c.jpg img062c.jpg 金持ち豆 B3
86
+
87
+ # img062c.jpg img062c.jpg 金持ち豆 B3
88
+
89
+ # img062c.jpg img062c.jpg 金持ち豆 B3
90
+
91
+ # .... .... .... ....
92
+
93
+ # img063c.jpg img063c.jpg 秘伝豆  B4
94
+
95
+ # img063c.jpg img063c.jpg 秘伝豆  B4
96
+
97
+ # img063c.jpg img063c.jpg 秘伝豆  B4
98
+
99
+ # .... .... .... ....
100
+
101
+ # img064c.jpg  NaN NaN B7
102
+
103
+ # .... .... .... ....
104
+
105
+ # NaN img067c.jpg きさらぎ B8
106
+
107
+ ```
108
+
109
+ ###  ② df1とdf2の結合の際にNaN値が発生し、コラムが一致しない場合
110
+
111
+ ```python3
112
+
113
+ df1 = 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']})
114
+
115
+ # Label
116
+
117
+ # img061c
118
+
119
+ # img061c
120
+
121
+ # img061c
122
+
123
+ # ....
124
+
125
+ # img062c
126
+
127
+ # img062c
128
+
129
+ # img062c
130
+
131
+ # ....
132
+
133
+ # img063c
134
+
135
+ # img063c
136
+
137
+ # img063c
138
+
139
+ # ....
140
+
141
+ # img064c
142
+
143
+ # img064c
144
+
145
+ # img064c
146
+
147
+ ```
148
+
149
+ ```python3
150
+
151
+ df2 = pd.DataFrame({'PictureNumber':['img061c.jpg', 'img062c.jpg', 'img063c.jpg',"img067c.jpg"], 'SumpleNumber':['くるみ豆', '金持ち豆', '秘伝豆',"きさらぎ"], 'BeenNumber':['B2', 'B3', 'B4',"B8"]})
152
+
153
+ # PictureNumber SumpleNunber BeenNumber 品種名
154
+
155
+ # img061c くるみ豆 B2
156
+
157
+ # img062c 金持ち豆 B3
158
+
159
+ # img063c 秘伝豆 B4
160
+
161
+ # img067c きさらぎ B8
162
+
163
+ ```
164
+
165
+ ```python3
166
+
167
+ def Merging (df1,df2):
168
+
169
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1)
170
+
171
+ if df3['Sumple'].isnull().any()."品種名" in df3.columns:
172
+
173
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop("品種名",axis=1).drop('PictureNumber', axis=1)
174
+
175
+ elif df3['Sumple'].isnull().any()."品種名" not in df3.columns:
176
+
177
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop('PictureNumber', axis=1)
178
+
179
+ return df3
180
+
181
+ Label PictureNumber SumpleNumber BeenNumber  
182
+
183
+ # img061c.jpg img061c.jpg くるみ豆 B2
184
+
185
+ # img061c.jpg img061c.jpg くるみ豆 B2
186
+
187
+ # img061c.jpg img061c.jpg くるみ豆 B2
188
+
189
+ # .... .... .... ....
190
+
191
+ # img062c.jpg img062c.jpg 金持ち豆 B3
192
+
193
+ # img062c.jpg img062c.jpg 金持ち豆 B3
194
+
195
+ # img062c.jpg img062c.jpg 金持ち豆 B3
196
+
197
+ # .... .... .... ....
198
+
199
+ # img063c.jpg img063c.jpg 秘伝豆  B4
200
+
201
+ # img063c.jpg img063c.jpg 秘伝豆  B4
202
+
203
+ # img063c.jpg img063c.jpg 秘伝豆  B4
204
+
205
+ # .... .... .... ....
206
+
207
+ # img064c.jpg  NaN NaN B7
208
+
209
+ # .... .... .... ....
210
+
211
+ # NaN img067c.jpg きさらぎ B8
212
+
213
+ ```
14
214
 
15
215
  ### 発生している問題・エラーメッセージ
16
216
 
@@ -26,7 +226,7 @@
26
226
 
27
227
  ```
28
228
 
29
- ### 該当のソースコード
229
+ ### 実際に書いたコード
30
230
 
31
231
  ```Python3
32
232
 
@@ -34,17 +234,23 @@
34
234
 
35
235
  df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1)
36
236
 
237
+ if df3['Sumple'].isnull().any()."品種名" in df3.columns:
238
+
239
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop("品種名",axis=1).drop('PictureNumber', axis=1)
240
+
37
- if df3['Sumple'].isnull().any()."品種名" not in df3.columns:
241
+ elif df3['Sumple'].isnull().any()."品種名" not in df3.columns:
38
-
39
- df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop("品種名",axis=1).drop('PictureNumber', axis=1).rename(columns={'Sumple':'品種名'})
242
+
40
-
41
- elif df3['Sumple'].isnull().any()."品種名"in df3.columns:
42
-
43
- df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer')
243
+ df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop('PictureNumber',
44
-
45
- return df3
244
+
46
-
47
- ```
245
+ ```
246
+
247
+ ### 参考にしたサイト
248
+
249
+ http://nekoyukimmm.hatenablog.com/entry/2015/04/10/133917
250
+
251
+
252
+
253
+ https://teratail.com/questions/191326
48
254
 
49
255
  ### 補足情報(FW/ツールのバージョンなど)
50
256
 

1

内容の明確化

2019/06/20 12:33

投稿

Danrussia
Danrussia

スコア44

test CHANGED
File without changes
test CHANGED
@@ -34,7 +34,7 @@
34
34
 
35
35
  df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='left').drop('PictureNumber', axis=1)
36
36
 
37
- if df3['Sumple'].isnull().any()."品種名" in df3.columns:
37
+ if df3['Sumple'].isnull().any()."品種名" not in df3.columns:
38
38
 
39
39
  df3 = pd.merge(df1, df2, left_on='Label', right_on='PictureNumber', how='outer').drop("品種名",axis=1).drop('PictureNumber', axis=1).rename(columns={'Sumple':'品種名'})
40
40