LoginSignup
0
0

More than 3 years have passed since last update.

「CSVのデータを比較について【行の追加と空白】」(SO)を参考に,winmergeとonline_awkでやってみた。

Last updated at Posted at 2021-02-25

(オリジナルポスト)
「CSVのデータを比較について【行の追加と空白】」 < スタック・オーバーフロー

winmergeの入力データ

csvデータ①

A,B,C,
1,アメリカ,○,
,カナダ,×,
3,日本,×,
,イタリア,〇,
5,イギリス,□,
,,×,

csvデータ②

A,B,C,
1,アメリカ,×,
2,カナダ,○,
3,日本,○,
4,タイ,○,
10,ベトナム,○,
,イタリア,〇,
5,イギリス,□,
,,×,
7,,〇,
8,,×,
,ミャンマ,□,

winmergeの実行方法と結果

winmerge>表示(V)>Diffコンテキスト(D)>0行

1,アメリカ,○,   1,アメリカ,×,
,カナダ,×,      2,カナダ,○,
3,日本,×,       3,日本,○,
                 4,タイ,○,
                 10,ベトナム,○,
                 7,,〇,
                 8,,×,
                 ,ミャンマ,□,

online awkの実行方法と結果

Command line (--help):

'BEGIN{FS=",";OFS=","} {gsub(/ /,"")}NF==4{print $1,$2,$3 "→追加された行★★★" }NF==7{print $4 ,$5 ,$6 " →"  "\"" $3 "\"" "→"  "\"" $6 "\"" "★★★" }'

STDIN:

1,アメリカ,○,   1,アメリカ,×,
,カナダ,×,      2,カナダ,○,
3,日本,×,       3,日本,○,
                 4,タイ,○,
                 10,ベトナム,○,
                 7,,〇,
                 8,,×,
                 ,ミャンマ,□,

STDOUT | STDERR:

1,アメリカ,× →"○"→"×"★★★
2,カナダ,○ →"×"→"○"★★★
3,日本,○ →"×"→"○"★★★
4,タイ,○→追加された行★★★
10,ベトナム,○→追加された行★★★
7,,〇→追加された行★★★
8,,×→追加された行★★★
,ミャンマ,□→追加された行★★★

最終保存2021/02/27

ついでにwinmergeで、コードと回答を比較してみた。

winmergeの画像では、ありません。テキストの左右配置です。右にスクロールが必要です。

コード                                                                                    1 件の回答

import csv                                                                               import csv
import pandas as pd                                                                      import pandas as pd

#差分抽出方法のコード                                                                      #差分抽出方法のコード

#ファイルの読み込み                                                                        #ファイルの読み込み
df1 = pd.read_csv("test1.csv",encoding='utf_8_sig')                                      df1 = pd.read_csv("test1.csv", dtype=str, na_filter=False, encoding='utf_8_sig')
df2 = pd.read_csv("test2.csv",encoding='utf_8_sig')                                      df2 = pd.read_csv("test2.csv", dtype=str, na_filter=False, encoding='utf_8_sig')

#ファイルの比較                                                                            # tuple に変換してから差分を取得
df3 = pd.concat([df1.iloc[df1.compare(df2[:len(df1)]).index],df2[len(df1):]])            df3 = df2[~df2.apply(tuple, 1).isin(df1.apply(tuple, 1))]

#特定の文字を検索                                                                          #特定の文字を検索
df_h = df3[df3["C"].str.contains("○|×|□",na=False)].reset_index(drop=True)               df_h = df3[df3["C"].str.contains("○|×|□")].reset_index(drop=True)
pd.set_option('display.unicode.east_asian_width', True)                                  

#ファイル書き込み                                                                          #ファイル書き込み
df_h.to_csv("test.csv",encoding='utf_8_sig',index=False)                                 df_h.to_csv("test.csv", encoding='utf_8_sig', index=False)

                                                                                         pd.set_option('display.unicode.east_asian_width', True)
                                                                                         print(df_h)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0