質問: int(float(df.loc[i,'sales'].replace('万',''))*1000) ``` 教えて頂きたいこと ---------- ### 1.FOR文、IF文の書き方の誤りについて 上記のコードのうち、最下部の ``` int(float(df.loc[i,'sales'].replace('万',''))*1000) ``` をfor文、及びif文を使わずに、1つのセルだけ置換、1000倍、型変換をすると、求める数値が算出できます。しかし、for文やif文を使うとエラーがでてしまいます。for文、if文の誤りをご指摘いただけないでしょうか。 ### 1.FOR文、IF文を使わないスマートな方法を教えていただけませんでしょうか。 いろいろ調べていると、map関数、Lambda式など、もう少しスマートな方法があるようなことを知りました。わたしのやりたいことに照らし合わせると、FOR文やIF文は、相応しくないのでしょうか?アドバイスいただけると幸いです。 環境 --- Macbook pro Anaconda Python 3.6 Jupyter notebook panas お忙しいとは思いますが、よろしくお願いいたします。 情報に不足がありましたら、ご指摘くださいませ。
回答: 行データ内の`sales`列を整数の円に換算する関数`toYen`を用意し `.map(toYen,axis=1)`で行毎に適用するとよいです。 ``` import pandas as pd df = pd.DataFrame({'date':['2018-1-1','2018-1-1'],'item':['tomato','orange'],'sales':['983220','29.1万円']}) print(df) """ date item sales 0 2018-1-1 tomato 983220 1 2018-1-1 orange 29.1万円 """ # salesを整数の円に換算 def toYen(row): sales = row['sales'] pos = sales.find('万') if pos < 0: sales = int(sales) else: sales = int(float(sales[:pos]) * 10000) # 「万」の手前までの数値を抽出し1万倍する row['sales'] = sales return row df.apply(toYen,axis=1) # 行毎に処理 print(df) """ date item sales 0 2018-1-1 tomato 983220 1 2018-1-1 orange 291000 """ ```