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

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

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

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

Python

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

Q&A

3回答

275閲覧

特定の文字列があるセルを丸ごと置換したい

shiburio

総合スコア6

CSV

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

Python

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

1グッド

0クリップ

投稿2024/06/07 14:43

編集2024/06/07 14:45

実現したいこと

Pythonで以下のようなcsvを読み込み、[名称]の列について名称に「会社」、「デパート」という文字が含まれていれば、そのセルを「オフィス」に置き換えたいです。

名称項目A項目B
A会社1001213
B会社 B支社1331254
病院C113
D株式会社1230121233
デパート1012423

発生している問題・分からないこと

replace関数やstrip関数を使って試行錯誤しているのですが、
セル全体を書き替えることができません。例えば以下のようになってしまいます。

名称項目A項目B
Aオフィス1001213
Bオフィス B支社1331254
病院C113
D株式オフィス1230121233
オフィス1012423

該当のソースコード

python

1df = pd.read_csv('C:/Users/yujir/workspace/homeapp/enavi202405(6186).csv',encoding="utf-8") 2#データ成形 3##空白削除 4df= df.dropna() 5 6#文字列置換 7name_replace = { 8 "会社":"食費", 9 "デパート":"オフィス" 10} 11df['名称'] = df["名称"].replace(name_replace,regex=True) 12df.to_csv('output.csv',index=None,encoding="cp932")

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

特定の文字列の前後を削除する や 特定の文字を置換することはできるのですが、
セル全体を上書きするやりかたが見つかりませんでした。

補足

特になし

shunya202403👍を押しています

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

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

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

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

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

guest

回答3

0

.loc と boolean indexing で、対象となるセルに値を代入してやるのでもいいと思います。

python

1is_office = df['名称'].str.contains('会社|デパート') 2df.loc[is_office, '名称'] = 'オフィス' 3 4# まとめて一行で書くなら 5df.loc[df['名称'].str.contains('会社|デパート'), '名称'] = 'オフィス'

投稿2024/06/08 00:02

bsdfan

総合スコア4716

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

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

0

こういうとき、既存のものを置き換えるのではなく、新しい列を作ることを考えたほうがやりやすいでしょう。

この場合、Dataframe.apply()が使えます。
質問の name_replace の定義の後をこう書き換えます。

python

1def convert_name (org, name_replace): 2 for key in name_replace: 3 if key in org: 4 return name_replace[key] 5 else: 6 return org 7 8df['new名称'] = df['名称'].apply(lambda x: convert_name(x, name_replace))

「new名称」のところを「名称」に変えれば置き換えられます。

投稿2024/06/07 15:31

TakaiY

総合スコア13337

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

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

0

python

1#文字列置換 2name_replace = { 3 ".*(会社|デパート).*":"オフィス", 4} 5 6df['名称'] = df["名称"].replace(name_replace, regex=True) 7df.to_csv('output.csv',index=None,encoding="cp932")
名称項目A項目B
オフィス1001213
オフィス1331254
病院C113
オフィス1230121233
オフィス1012423

投稿2024/06/07 15:03

編集2024/06/07 15:05
melian

総合スコア20255

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問