前提・実現したいこと
データフレーム(df)の中のseriesのテキストデータについて、設定したワードリスト(list)のテキストデータに基づいて部分一致で新しいデータセットをエクセルで抽出したい。
エクセルシートから読み込んだテキストデータについて、ワードリストが含まれていたら抽出せず(行ごと削除するイメージ)、ワードリスト以外の一覧を最終的にはエクセルで吐き出したいと思っております。
テキストデータは20万行近くあり、ワードリストは数百行、どちらも半角、全角、記号等が入り混じっている状況です。
調べながら色々と試してみたのですが、想定する挙動にならず、よく分からなくなってきてしまったため質問させて頂きます。
発生している問題・エラーメッセージ・該当のソースコード
1 こちらは想定する件数がうまく取れません。(取得件数が少ない) df = df[~reduce(lambda a, b: a&b, (df['word'].str.contains(s) for s in wordlist))] 2 こちらは2行目が動きません。 mask = df['Message'].str.contains(r'\b(?:{})\b'.format('|'.join(wordlist))) data = df[~mask] TypeError: bad operand type for unary ~: 'float'
dfとワードリストの設定
dfでデータセットを読み込んでdf['word']のシリーズが対象、ワードリストについてはlistにしています。
///df
df = pd.read_excel('word.xlsx', header=0, encoding='utf-8_sig')
///
wordlist = pd.read_excel('wordlist.xlsx', header=0, encoding='utf-8_sig')
wordlist = np.ravel(wordlist).tolist()
環境
python3.6.5
(anacondaにて構築)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/25 02:26
2019/03/25 02:30
2019/03/25 03:25