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

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

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

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

pandas

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

Q&A

解決済

2回答

1356閲覧

○円○銭→○,○に数値化

kentaronagata

総合スコア20

Python

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

pandas

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

0グッド

0クリップ

投稿2021/12/26 17:21

金額 0 0 44円 1 10 105円60銭 2 20 139円70銭 3 30 170円50銭 4 40 198円 5 50 206円80銭 6 100 214円50銭 7 100 220円

上記のようなデータフレームの金額の列で、105円60戦を105.6円のように数値化したいです。
要素を数値化にするstr.replace()を1行1行に使用して変換しなければならないのでしょうか?
他に方法はないでしょうか?

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

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

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

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

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

guest

回答2

0

以下は pandas.Series.str.extract() を使う方法です。

python

1import pandas as pd 2import io 3 4pd.set_option('display.unicode.east_asian_width', True) 5 6data = ''' 7金額 844円 9105円60銭 10139円70銭 11170円50銭 12198円 13206円80銭 14214円50銭 15220円 1635銭 17'''.strip() 18 19df = pd.read_csv(io.StringIO(data)) 20 21df['金額'] = ( 22 df['金額'].str 23 .extract(r'((\d+)円)?((\d+)銭)?') 24 # .extract(r'(\d+(?=円))?(\d+(?=銭))?') 25 .fillna(0).astype(int, errors='ignore') 26 .apply(lambda x: f'{x[1]+(x[3]/100 if x[3] else 0)}円', axis=1)) 27 28print(df) 29 30# 31 金額 320 44331 105.6342 139.7353 170.5364 198375 206.8386 214.5397 220408 0.35

投稿2021/12/27 00:10

編集2021/12/27 01:10
melian

総合スコア19865

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

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

0

ベストアンサー

pandasのstrアクセサを使うと以下のようになります。

python

1>>> print(df) 2 金額 30 0 4441 10 1056052 20 1397063 30 1705074 40 19885 50 2068096 100 21450107 100 22011>>> df['金額'] = (df['金額']+'銭').str.replace('円', '.').str.replace('[.銭]銭', '円', regex=True) 12>>> print(df) 13 金額 140 0 44151 10 105.60162 20 139.70173 30 170.50184 40 198195 50 206.80206 100 214.50217 100 220

正規表現の先読みアサーションまで使うと以下のようになります。

python

1>>> df['金額'] = df['金額'].str.replace('円(?=.)', '.', regex=True).str.replace('銭', '円') 2>>> print(df) 3 金額 40 0 4451 10 105.6062 20 139.7073 30 170.5084 40 19895 50 206.80106 100 214.50117 100 220

参考
pandasの文字列メソッドで置換や空白削除などの処理を行う
公式ドキュメント 正規表現のシンタックス

投稿2021/12/26 23:33

編集2021/12/27 00:06
ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問