質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

2471閲覧

複数のcsvを読み込み、重複する行を削除したうえで新しいcsvを作りたい

taboopython

総合スコア40

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/02/02 04:31

編集2020/02/02 11:11

2つのcsvを読み込み、データを合体させ、重複する行を削除し、新しいcsvを作りたいのですが、効率良い方法をご存知の方がいらっしゃればご教示いただければ幸いです。

なお2つのcsvはヘッダーが同じデータです。

csv1

1#word.csv 2 3komoji,omoji #ヘッダー 4aaa,AAA 5bbb,BBB 6ccc,CCC

csv2

1 2#word_sub.csv 3 4komoji,omoji #ヘッダー 5aaa,AAA 6bbb,BBB

csv3(作りたいcsv)

1komoji,omoji #ヘッダー 2ccc,CCC # ← csv1とcsv2で重複しない行が残るイメージ

最初は、pandasで読み込み、mergeさせた後、二つのデータから重複するものを削除する方法で考えていましたがうまくできませんでした。他のやり方でも効率良い方法があ

python

1df1 = pd.read_csv('word.csv')  #csv1_word.csvの取り込み 2df2 = pd.read_csv('word_sub.csv') # csv2_word_sub.csvの取り込み 3df3 = df + df2 4print(df3)

みたいにすると、、
aaacccc,AAABBB
Nan Nan
Nan Nan のように出力されます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のようにpd.merge(how='outer'indicator=Trueで実行することで、各行がどちらに含まれているかが分かるようになるので、両方に含まれる行を除くことで望む結果が得られます。

参考:how to identify whats NOT in the inner join during dataframe merge

Python

1import pandas as pd 2 3# テストデータ 4sr1 = pd.Series(list('abc')) 5sr2 = pd.Series(list('bcd')) 6df1 = pd.DataFrame({'low':sr1, 'up':sr1.str.upper()}) 7df2 = pd.DataFrame({'low':sr2, 'up':sr2.str.upper()}) 8 9df = pd.merge(df1, df2, how='outer', on=df1.columns.tolist(), indicator=True) 10print(df) 11# low up _merge 12#0 a A left_only 13#1 b B both 14#2 c C both 15#3 d D right_only 16 17df = df.query('_merge != "both"').drop(columns='_merge').reset_index(drop=True) 18print(df) 19# low up 20#0 a A 21#1 d D

投稿2020/02/02 05:24

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taboopython

2020/02/02 11:19

早速の回答誠にありがとうございます。素人的な質問で大変恐縮ですが、そもそも、 sr1 = pd.Series(list('abc')) sr2 = pd.Series(list('bcd')) を作るために、 word.csv(下記にも記載)のようなcsvをどのように料理すれば良いでしょうか?もし、適当なステップがございましたらご教示いただければ幸いです。 この場合ですと、low とupの列から、データを抽出するという感じになるのかとは思うですが。 low,up #ヘッダー aaa,AAA bbb,BBB ccc,CCC
can110

2020/02/02 11:24

その部分はあくまでテスト的にデータを作成するためのコードです。 質問コードの df1 = pd.read_csv('word.csv') df2 = pd.read_csv('word_sub.csv') のままでよいです。
taboopython

2020/02/03 09:32

ありがとうございます!ようやく意味がわかり、うまくいきました!mergeの仕方とqueryを使いこなせるよう精進します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問