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

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

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

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

Python

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

Q&A

解決済

2回答

2875閲覧

[python] pandasで読み込んだDataFrameの文字列処理について

Dadada_c.

総合スコア59

Python 3.x

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

Python

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

0グッド

1クリップ

投稿2018/06/26 23:29

#pandasでcsvを読み込んだ後の文字列処理について

pandasでcsvを読み込み、usecolsで指定列を読み込んだ後、
さらに、「商品名」というカラムの中から「●●●(文字列)」が入っている行だけ抜きだしました。
その後、文字列を置き変えたいのですが、抜き出した行だけでなくDataFrame全体の文字列が置き換えされてしまいました。

import pandas as pd df = pd.read_csv('201806251531.csv',encoding='shift_jis',usecols=[0,51,52,105,106,109,127]) output = df[df['商品名'].str.contains('文字列')] cut = df['商品名'].str.replace('文字列','').str.replace('文字列2','').str.replace('文字列3','') print(cut) #cut.to_csv('aaaa.csv',encoding='shift_jis',mode='a')

最終的には文字列を削除したあとcsvで出力予定です。
お手数をおかけしますが宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

df[df['商品名'].str.contains('文字列')] の条件にマッチする行だけの文字列を置き換えたいということでしょうか?

であれば

Python

1mask = df['商品名'].str.contains('文字列') 2df.loc[mask, '商品名'] = df['商品名'].str.replace('文字列','').str.replace('文字列2','').str.replace('文字列3','') 3 4print(df) 5df.to_csv('aaaa.csv',encoding='shift_jis',mode='a')

で良いかと思います。

投稿2018/06/27 00:45

magichan

総合スコア15898

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

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

Dadada_c.

2018/06/27 01:09

ご回答ありがとうございます!そのように書くといいんですね・・!勉強になります。 マッチする行だけ抜き出して、それ以外の行は出力したくありませんがなにかいい方法がありますでしょうか。。
magichan

2018/06/27 01:39

考え方は2通り 1. マッチしない行をデータフレームから削除してよいのなら df = df.loc[mask] ##または単に df[mask] をするとよいかと。Indexが不連続なのが気になる場合はさらに df = df.loc[mask].reset_index(drop=True) としてIndexを振りなおします。 2. そうではなくて単にCSV出力時のみ マッチしない行を無視するのであれば df.loc[mask].to_csv(...) ですかね。
Dadada_c.

2018/06/27 01:53

できました!ありがとうございます!ご丁寧に説明頂いて更なる学習意欲が向上しました!またよろしくお願いいたします。
guest

0

抽出した行のみを対象としたいのであれば~~cut = df['商品名']~cut = output['商品名']~では?
~~
上記だとcut商品名列のみになってしまいますね。

output['商品名'] = output['商品名'].str~outputを出力します。

投稿2018/06/27 00:26

編集2018/06/27 00:58
can110

総合スコア38266

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問