回答編集履歴
3
d
test
CHANGED
@@ -160,6 +160,4 @@
|
|
160
160
|
|
161
161
|
+,13101,101,1010047,トウキョウト,チヨダク,ウチカンダ,東京都,千代田区,内神田,0,0,1,0,0,5
|
162
162
|
|
163
|
-
+,13101,101,1010041,トウキョウト,チヨダク,ウチカンダ,東京都,千代田区,内神田,0,0,1,0,0,5
|
164
|
-
|
165
163
|
```
|
2
d
test
CHANGED
@@ -96,25 +96,37 @@
|
|
96
96
|
|
97
97
|
|
98
98
|
|
99
|
-
|
99
|
+
# CSV を読み込む
|
100
100
|
|
101
|
+
before = pd.read_csv('before.txt', header=None)
|
102
|
+
|
101
|
-
after = pd.read_csv('after.
|
103
|
+
after = pd.read_csv('after.txt', header=None)
|
102
104
|
|
103
105
|
|
104
106
|
|
105
|
-
#
|
107
|
+
# 左結合
|
106
108
|
|
107
|
-
diff_r
|
109
|
+
diff_before = before.merge(after, indicator=True, how='left').loc[lambda x : x['_merge'] != 'both']
|
108
110
|
|
109
|
-
|
111
|
+
diff_after = after.merge(before, indicator=True, how='left').loc[lambda x : x['_merge'] != 'both']
|
110
112
|
|
111
|
-
diff = pd.concat([before[diff_rows], after[diff_rows]]
|
112
113
|
|
113
|
-
).sort_index(kind='merge')
|
114
114
|
|
115
|
-
#
|
115
|
+
# マーカー挿入
|
116
116
|
|
117
|
+
diff_before.insert(0, 'marker', '-')
|
118
|
+
|
117
|
-
diff.insert(0, 'marker',
|
119
|
+
diff_after.insert(0, 'marker', '+')
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
# 交互に結合する。
|
124
|
+
|
125
|
+
diff = pd.concat([diff_before, diff_after]).sort_index(kind='merge')
|
126
|
+
|
127
|
+
# _merge 列を削除
|
128
|
+
|
129
|
+
diff.drop(columns=['_merge'], inplace=True)
|
118
130
|
|
119
131
|
|
120
132
|
|
@@ -134,8 +146,6 @@
|
|
134
146
|
|
135
147
|
|
136
148
|
|
137
|
-
|
138
|
-
|
139
149
|
```python
|
140
150
|
|
141
151
|
-,13101,102,1020072,トウキョウト,チヨダク,イイダバシ,東京都,千代田区,飯田橋,0,0,1,0,0,0
|
@@ -150,4 +160,6 @@
|
|
150
160
|
|
151
161
|
+,13101,101,1010047,トウキョウト,チヨダク,ウチカンダ,東京都,千代田区,内神田,0,0,1,0,0,5
|
152
162
|
|
163
|
+
+,13101,101,1010041,トウキョウト,チヨダク,ウチカンダ,東京都,千代田区,内神田,0,0,1,0,0,5
|
164
|
+
|
153
165
|
```
|
1
d
test
CHANGED
@@ -65,3 +65,89 @@
|
|
65
65
|
13
|
66
66
|
|
67
67
|
```
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
## 追記
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
pandas だけで同じような出力をするなら以下のようになります。
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
1. 一致しない行を抽出する。
|
80
|
+
|
81
|
+
2. 一致しない行を交互にマージする。
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
```python
|
88
|
+
|
89
|
+
import csv
|
90
|
+
|
91
|
+
from io import StringIO
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
import pandas as pd
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
before = pd.read_csv('before.csv', header=None)
|
100
|
+
|
101
|
+
after = pd.read_csv('after.csv', header=None)
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
# 一致しない行を抽出する。
|
106
|
+
|
107
|
+
diff_rows = (before != after).any(axis=1)
|
108
|
+
|
109
|
+
# 一致しない行を交互に結合
|
110
|
+
|
111
|
+
diff = pd.concat([before[diff_rows], after[diff_rows]]
|
112
|
+
|
113
|
+
).sort_index(kind='merge')
|
114
|
+
|
115
|
+
# -+ のマーカーを先頭列に挿入する。
|
116
|
+
|
117
|
+
diff.insert(0, 'marker', np.tile(['-', '+'], diff_rows.sum()))
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
# DataFrame を出力する。
|
122
|
+
|
123
|
+
ofs = StringIO()
|
124
|
+
|
125
|
+
diff.to_csv(ofs, index=False, header=False)
|
126
|
+
|
127
|
+
output = ofs.getvalue()
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
print(output)
|
132
|
+
|
133
|
+
```
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
```python
|
140
|
+
|
141
|
+
-,13101,102,1020072,トウキョウト,チヨダク,イイダバシ,東京都,千代田区,飯田橋,0,0,1,0,0,0
|
142
|
+
|
143
|
+
+,13101,102,1020082,トウキョウト,チヨダク,イチバンチョウ,東京都,千代田区,一番町,0,0,0,0,0,0
|
144
|
+
|
145
|
+
-,13101,101,1010032,トウキョウト,チヨダク,イワモトチョウ,東京都,千代田区,岩本町,0,0,1,0,0,0
|
146
|
+
|
147
|
+
+,13101,101,1010035,トウキョウト,チヨダク,イワモトチョウ,東京都,千代田区,岩本町,0,0,1,0,0,0
|
148
|
+
|
149
|
+
-,13101,101,1010047,トウキョウト,チヨダク,ウチカンダ,東京都,千代田区,内神田,0,0,1,0,0,0
|
150
|
+
|
151
|
+
+,13101,101,1010047,トウキョウト,チヨダク,ウチカンダ,東京都,千代田区,内神田,0,0,1,0,0,5
|
152
|
+
|
153
|
+
```
|