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

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

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

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

pandas

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

1回答

406閲覧

df内のリストに特定文字が含まれるか判定してカラムにフラグを追加

yoshi216

総合スコア1

Python 3.x

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

pandas

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

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

2グッド

0クリップ

投稿2022/10/17 23:47

編集2022/10/18 12:35

実現したいこと

  • 以下のデータフレーム(df_result)の「タイトル」「タグ」「本文」のいずれかに検索ワード(search_word)が含まれるか判定
  • 含まれていた場合はTrue,含まれない場合はFalseをカラムに追加
タイトルタグ本文
AAA[xxx, yyy, zzz]EEE
BBB[xxx, yyy, zzz, AAA]FFF
CCC[xxx, yyy, zzz]GGGAAA
DDD[xxx, yyy, zzz]HHH

↓検索ワードを「AAA」として実行

タイトルタグ本文フラグ
AAA[xxx, yyy, zzz]EEETrue
BBB[xxx, yyy, zzz, AAA]FFFTrue
CCC[xxx, yyy, zzz]GGGAAATrue
DDD[xxx, yyy, zzz]HHHFalse

発生している問題・エラーメッセージ

SyntaxError: invalid non-printable character U+3000

該当のソースコード

python

1df_result["フラグ"] = np.where( 2df_result["タイトル"].str.contains(search_word) | 3df_result["本文"].str.contains(search_word) | 4df_result["タグ"].isin(search_word) 5,True, False)

試したこと

以下の通りタグ無しであれば想定通りの処理になったので、リスト型の「タグ」カラムの判定方法を教えて頂きたいです。

python

1df_result["フラグ"] = np.where( 2df_result["タイトル"].str.contains(search_word) | 3df_result["本文"].str.contains(search_word) 4,True, False)
yoshi216👍を押しています
melianを押しています

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

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

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

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

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

can110

2022/10/18 00:56

エラーについてはコードに全角空白(U+3000)が含まれているためなので取り除けばよいです。 そのうえでsearch_wordと異なるsearch_word_listとはどのような意味合い、値の変数でしょうか? あるいは、タグ列での判定は他の列と同じく「各要素のいずれかの文字列にsearch_wordが含まれているか?」としたいということでしょうか?
yoshi216

2022/10/18 12:34

> エラーについてはコードに全角空白(U+3000)が含まれているためなので取り除けばよいです。 全角空白文字見落としたうえ、エラーコード調査不足でした…。ありがとうございます! > あるいは、タグ列での判定は他の列と同じく「各要素のいずれかの文字列にsearch_wordが含まれているか?」としたいということでしょうか? はい、「各要素のいずれかの文字列にsearch_wordが含まれているか?」を検証し、フラグ列を追加したいです。 色々試しているときのソースをコピペしてしまいましたので、search_word_list → search_wordに修正しました。
guest

回答1

0

ベストアンサー

python

1import pandas as pd 2 3df = pd.DataFrame({ 4 'タイトル': ['AAA', 'BBB', 'CCC', 'DDD'], 5 'タグ': [['xxx', 'yyy', 'zzz'], ['xxx', 'yyy', 'zzz', 'AAA'], 6 ['xxx', 'yyy', 'zzz'], ['xxx', 'yyy', 'zzz']], 7 '本文': ['EEE', 'FFF', 'GGGAAA', 'HHH'], 8}) 9 10# 11search_word = 'AAA' 12df['フラグ'] = df.applymap(lambda i: search_word in i).any(axis=1) 13print(df)
タイトルタグ本文フラグ
AAA['xxx', 'yyy', 'zzz']EEETrue
BBB['xxx', 'yyy', 'zzz', 'AAA']FFFTrue
CCC['xxx', 'yyy', 'zzz']GGGAAATrue
DDD['xxx', 'yyy', 'zzz']HHHFalse

投稿2022/10/18 04:45

melian

総合スコア19798

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

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

yoshi216

2022/10/18 13:24

ご回答ありがとうございます! 教えて頂いたソースですと、TypeError: argument of type 'int' is not iterableのエラーが出たので以下の通り改変して対応する事が出来ました。 df_result["フラグ"] = np.where( df_result["タイトル"].str.contains(search_word) | df_result["本文"].str.contains(search_word) | df_result['タグ'].apply(lambda i: search_word in i) ,True, False)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問