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

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

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

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

解決済

【Python】filterによる条件に一致するデータ抽出について

essa
essa

総合スコア79

Python

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

2回答

0評価

0クリップ

464閲覧

投稿2018/11/16 07:12

編集2018/11/16 07:43

条件に一致するデータ抽出について質問させてください。

参考にしているサイトは下記です。
https://python.civic-apps.com/map-reduce-filter/

「filter:条件に一致する要素のみ抽出する」

以下のようなコードとなっています(転載させていただきます)

python

filter(lambda n:n%2==1, items) #lambda関数がTrueを返す要素(奇数)要素のみ抽出する [1, 2, 3] [x for x in items if x%2==1] #同じ事をリスト内包表記で。(最適な方法) [1, 3]

条件としている部分をリストにして、
リスト内の値と一つでも一致するなら抽出する。ということをしたいです。

all()関数を使えば実現可能かと思ったのですが、できませんでした。

ご存知のかたがいましたら、教えていただけるとありがたいです。

どうぞよろしくお願いいたします。

=======================
下記追記です。

コードは下記の様な感じです。

Python

# -*- coding: utf-8 -*- import pandas as pd import csv import sys code = pd.read_csv("ほげほげ.csv",engine='python',encoding='utf-8') codelist = code.values.tolist() codelist = [ flatten for inner in kcl for flatten in inner ] with open("ほげほげ書き込み.csv",encoding='utf-8',errors='ignore') as f: reader = csv.reader(f) header = next(reader) rows = [row for row in reader] with open("hogehogehoge.csv", "w", encoding='utf-8') as f: writer = csv.writer(f, lineterminator = "\r\n") writer.writerow(header) nrows = list(filter(lambda row: row[10] == codelist, rows)) writer.writerows(nrows)

下から二行目の部分のrow[10]とcodelistが一致しているもののみ、nrowsに代入したいと考えています。

#######################
更に追記
#######################

ほげほげ.csvが以下です。

品物 A(row[0]) B(row[1]) C(row[2]) あ 111 222 333 い 111 222 333 う 111 222 333 え 111 222 333 お 111 222 333 か 111 222 333 き 111 222 333 く 111 222 333 け 111 222 333 こ 111 222 333 さ 111 222 333 し 111 222 333

ほげほげ書き込み.csvが以下です。

Z 111 222 333 111 222 333 111 222 333 111 222 333

例えばこの場合、AとZを比較します。
そうなると、品物の「あ」「え」「き」「こ」
が抽出できる
というような感じです。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

tiitoi

2018/11/16 07:15

入力とフィルタ後の期待する出力の例を記載いただけますか?
essa

2018/11/16 07:30

コードを追記しました。  入力例と出力例ですが、入力はCSV フィルタに使用するリストもCSV 出力もCSVです。
tiitoi

2018/11/16 07:37 編集

ほげほげ.csv と ほげほげ書き込み.csv の中身を先頭10行とかだけでもいいので、追記できますか?
essa

2018/11/16 07:43

csvファイルの中身を書きました。ご確認いただければ幸いです。
tiitoi

2018/11/16 07:54

pandas 使うなら、pandas の機能で条件を満たす行を抽出すればよいかと思いますが、それでは駄目なのでしょうか?回答のほうに追記しました。
essa

2018/11/16 08:08

回答ありがとうございます。自分がpandasの機能を知らなかったので、使っていませんでした。ありがとうございます。実行してみたところ、「ValueError: Can only compare identically-labeled Series objects」というエラーがでてしまいました。ちなみにtypeを確認したところ、どちらも<class 'pandas.core.frame.DataFrame'>でした。
tiitoi

2018/11/16 08:15

想定している data.csv と hoge.csv を回答欄に追記しました。
essa

2018/11/16 08:31

dataとhogeの行数は異なっています。異なった場合はエラーは起こり得るでしょうか?
essa

2018/11/16 08:31

行数ではなく、列数でした。列数が異なっています。
tiitoi

2018/11/16 08:51 編集

data.csv は A, B, C の3列あり、hoge は Z の1列ありますね。そして、data.csv のうち、A列の値がZ列と一致する行を抽出するという認識なのですが、そうではないのでしょうか?回答に記載したCSVと同じであれば、エラーにならないはずです。
essa

2018/11/16 09:24

質問が適切でなかったかもしれません。申し訳ありません。もう一度整理して質問したいと思います。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python

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