Pandasのデータテーブルに、文字列が混ざっています。数値(整数:int)にする方法がうまくいきません。アドバイスを頂けますでしょうか。
やりたいこと
以下、現在のdataflame(以下、df)に対して、
date | item | sales |
---|---|---|
2018-1-1 | トマト | 983220 |
2018-1-1 | りんご | 233320 |
2018-1-2 | みかん | 29.1万円 |
2018-1-3 | トマト1 | 983220 |
2018-1-4 | りんご1 | 233320 |
2018-1-5 | ぶどう | 19.1万円 |
sales列の中から、万円の文字を削除し、さらに1000倍して桁数をあわせ、全て整数(int型)に統一したいです。
以下、希望のデータフレームのようにしたいです。
date | item | sales |
---|---|---|
2018-1-1 | トマト | 983220 |
2018-1-1 | りんご | 233320 |
2018-1-2 | みかん | 291000 |
2018-1-3 | トマト1 | 983220 |
2018-1-4 | りんご1 | 233320 |
2018-1-5 | ぶどう | 191000 |
試したこと
まず、考えたのは、
- 万円を replace関数で削除する
- 1000倍する(float()と、*1000)
- 数値(整数)にする(int())
そして、これをfor文で繰り返す。
ということです。私が考えたのは、以下のようなコードです。
python
1for i in range(1,len(df['sales'])): 2 if "万" not in df.loc[i,'sales']: 3 df.loc[i,'sales'] = int(df.loc[i,'sales']) 4 else: 5 df.loc[i,'sales'] = int(float(df.loc[i,'sales'].replace('万',''))*1000)
教えて頂きたいこと
1.FOR文、IF文の書き方の誤りについて
上記のコードのうち、最下部の
python
1int(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
お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘くださいませ。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/25 03:24