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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

Q&A

解決済

1回答

1118閲覧

2つのcsvを比較し,一致しないものを条件付きで別のシートに書き込む方法

uguisu-21

総合スコア5

CSV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

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

0グッド

0クリップ

投稿2021/08/19 13:28

前提・実現したいこと

以下2つのcsv(test1.csv,test2.csv)から,test3のようなcsvを作りたいと考えています.

やりたいこと
・2つのcsvから不要な列 ’詳細’ の削除
・2つのcsvから不要な行, ジャッジ=’FP’ の削除
・項目ごとにTP→FP,もしくはFP→TPになった項目が判断できるように,新しくtest3.csvというファイルに必要なデータを追加して書き込み
(TP→TP,FN→FNに変化した項目は除外)


<test1.csv>

リスト項目正解データ判断結果ジャッジ詳細
001TP
002FN
002FN
003TP

<test2.csv>

リスト項目正解データ判断結果ジャッジ詳細
001TP
002FN
002TP
002-no_dataFP
003FN

<test3.csv>

リスト項目正解データ判断結果ジャッジ1ジャッジ2
002FNTP
003TPTP

該当のソースコード

python

1import pandas as pd 2df1 = pd.read_csv('test1.csv') 3df2 = pd.read_csv('test2.csv') 4 5df1 = df1[['リスト', '項目', '正解データ', '判断結果', 'ジャッジ']] 6 7df1_tp = df1 8df1_fp[df1.judge!= 'FP']

試したこと

・csvの読み込み
・不要な列、行の削除

困りごと

データフレームの扱い方がわからず、TP→FNなどの比較の仕方がわからず困っております。
また、データを追加しながら新しいcsvに書き込む方法がわからないため、教えていただけると幸いです。

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

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

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

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

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

meg_

2021/08/19 14:34

やりたいこと3つの内どこまで実現できていますか?調べたことはありますか?
guest

回答1

0

ベストアンサー

・2つのcsvから不要な列 ’詳細’ の削除

python

1>>> print(df1) 2 リスト 項目 正解データ 判断結果 ジャッジ 詳細 30 1 〇 犬 犬 TP NaN 41 2 △ 猫 犬 FN NaN 52 2 ▽ 犬 猫 FN NaN 63 3 ◇ 猫 猫 TP NaN 7>>> print(df2) 8 リスト 項目 正解データ 判断結果 ジャッジ 詳細 90 1 〇 犬 犬 TP NaN 101 2 △ 猫 犬 FN NaN 112 2 ▽ 犬 犬 TP NaN 123 2 - no_data 猫 FP NaN 134 3 ◇ 猫 犬 FN NaN 14>>> df1.drop('詳細', inplace =True, axis=1) 15>>> df2.drop('詳細', inplace =True, axis=1) 16>>> print(df1) 17 リスト 項目 正解データ 判断結果 ジャッジ 180 1 〇 犬 犬 TP 191 2 △ 猫 犬 FN 202 2 ▽ 犬 猫 FN 213 3 ◇ 猫 猫 TP 22>>> print(df2) 23 リスト 項目 正解データ 判断結果 ジャッジ 240 1 〇 犬 犬 TP 251 2 △ 猫 犬 FN 262 2 ▽ 犬 犬 TP 273 2 - no_data 猫 FP 284 3 ◇ 猫 犬 FN

dropについては、pandas.DataFrameの行・列を指定して削除するdropをお読みください。

・2つのcsvから不要な行, ジャッジ=’FP’ の削除

python

1>>> df1 = df1[df1['ジャッジ'] != 'FP'] 2>>> df2 = df2[df2['ジャッジ'] != 'FP'] 3>>> print(df1) 4 リスト 項目 正解データ 判断結果 ジャッジ 50 1 〇 犬 犬 TP 61 2 △ 猫 犬 FN 72 2 ▽ 犬 猫 FN 83 3 ◇ 猫 猫 TP 9>>> print(df2) 10 リスト 項目 正解データ 判断結果 ジャッジ 110 1 〇 犬 犬 TP 121 2 △ 猫 犬 FN 132 2 ▽ 犬 犬 TP 144 3 ◇ 猫 犬 FN

・項目ごとにTP→FP,もしくはFP→TPになった項目が判断できるように,新しくtest3.csvというファイルに必要なデータを追加して書き込み
(TP→TP,FN→FNに変化した項目は除外)

python

1>>> df_m = pd.merge(df1[['リスト','項目','正解データ','ジャッジ']].rename(columns = {'ジャッジ':'ジャッジ1'}), df2.rename(columns = {'ジャッジ':'ジャッジ2'})) 2print(df_m) 3>>> print(df_m) 4 リスト 項目 正解データ ジャッジ1 判断結果 ジャッジ2 50 1 〇 犬 TP 犬 TP 61 2 △ 猫 FN 犬 FN 72 2 ▽ 犬 FN 犬 TP 83 3 ◇ 猫 TP 犬 FN 9>>> df3 = df_m[df_m['ジャッジ1'] != df_m['ジャッジ2']][['リスト','項目','正解デ ータ','判断結果','ジャッジ1','ジャッジ2']] 10>>> print(df3) 11 リスト 項目 正解データ 判断結果 ジャッジ1 ジャッジ2 122 2 ▽ 犬 犬 FN TP 133 3 ◇ 猫 犬 TP FN

pd.mergeについては、pandas.DataFrameを結合するmerge, join(列・インデックス基準)をお読みください。
書込みについては、pandasでcsvファイルの書き出し・追記(to_csv)をお読みください。

投稿2021/08/19 14:33

ppaul

総合スコア24666

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

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

uguisu-21

2021/08/19 15:16 編集

大変参考になりました。ありがとうございます。 結合に関して、csvそれぞれの行の値が同じものだった場合、マージのときに、省かれてしまうのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問