質問編集履歴
4
再度 前提と修正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,11 +18,12 @@
|
|
18
18
|
|
19
19
|
追加ファイル.csv
|
20
20
|
(りんご、バナナが元のファイルと重複している。
|
21
|
+
りんごのように元データでりんご、追加データでアップルと商品名が異なる場合もあるのがJANコードが重複していればスキップしたい(行の完全一致ではないので、pandas のdrop_duplicatesでは難しいかも・・)
|
21
22
|
|
22
23
|
|列4(商品名)|列15(JANコード)|
|
23
24
|
|:--|:--:|
|
24
25
|
|きゅうり|5555555|
|
25
|
-
|
|
26
|
+
|アップル|111111|
|
26
27
|
|バナナ|バーコードなし|
|
27
28
|
|なす|666666|
|
28
29
|
|
3
自分で実行したコードを修正しました
title
CHANGED
File without changes
|
body
CHANGED
@@ -59,21 +59,18 @@
|
|
59
59
|
```python
|
60
60
|
import pandas as pd
|
61
61
|
|
62
|
-
|
62
|
+
df1 = pd.read_csv("./元データ.csv", encoding="cp932",header=None)
|
63
|
-
|
63
|
+
df2 = pd.read_csv("./追加データ.csv", encoding="cp932",header=None)
|
64
64
|
|
65
65
|
import csv
|
66
66
|
|
67
67
|
save_csv='./元データ.csv'
|
68
|
-
|
69
|
-
for row in df2.iterrows() : #← df2.iloc[:, 4] とdf2.iloc[:, 15]を参照したいのですがどうやって取り出せばいいのかわかりません
|
70
|
-
|
68
|
+
for x in df2.iloc[:, 15]:
|
71
|
-
|
69
|
+
if x in df1.iloc[:, 15]:
|
72
|
-
print(row) ← 重複してCSVに追記されないデータを出力
|
73
|
-
|
70
|
+
continue
|
71
|
+
|
74
72
|
else:
|
75
|
-
#元データに重複する値(列4、列15参照)がない行のみ、追加ファイルの行を元エータに追記する
|
76
|
-
with open(
|
73
|
+
with open(df1, 'a',encoding ='cp932') as f:
|
77
74
|
writer = csv.writer(f)
|
78
|
-
writer.writerow(df2.iterrows())
|
75
|
+
writer.writerow(df2.iterrows())#xが含まれる行を1行ずつ取り出す方法がわからない
|
79
76
|
```
|
2
説明文の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -29,6 +29,9 @@
|
|
29
29
|
##追記後のファイルイメージ
|
30
30
|
結合したい(元ファイルに追記したい)
|
31
31
|
きゅうり、なす の重複していない行のみを元ファイルに追記したい(順次保存)
|
32
|
+
バーコードで重複チェックだけだと
|
33
|
+
バーコードが存在しないデータ(バナナ)が重複する可能性があるため
|
34
|
+
名前での一致でも重複したデータはスキップしたいです
|
32
35
|
|列4(商品名)|列15(JANコード)|
|
33
36
|
|:--|:--:|
|
34
37
|
|りんご|#111111|
|
1
コード修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -72,5 +72,5 @@
|
|
72
72
|
#元データに重複する値(列4、列15参照)がない行のみ、追加ファイルの行を元エータに追記する
|
73
73
|
with open(save_csv, 'a',encoding ='cp932') as f:
|
74
74
|
writer = csv.writer(f)
|
75
|
-
writer.writerow(
|
75
|
+
writer.writerow(df2.iterrows())
|
76
76
|
```
|