前提・実現したいこと
Python初学者でPython3.8、Pandas0.25.3を使用しています。
- 上場企業の決算書をスクレイピングするプログラムを作成中です。
- スクレイピング自体は行うことができ、結果をex1.csvに保存しています。
- 下記ex1.csvは本質問に関係する箇所を抜き出して表示しています。
実現したいこと
- スクレイピングした金額の単位が、円(位取りカンマ無)と百万円(位取りカンマ有)が混在しているため、円に統一したいです。
- 下記「希望する形」のようにしたいのですが「現状」のようになってしまいます。
ex1.csv 希望する形 現状
year yen year yen year yen
2015 4,200 2015 4200000000 2015 -94967296
2015 1,460 2015 1460000000 2015 1460000000
2016 4,700 2016 4700000000 2016 405032704
2016 1,700 2016 1700000000 2016 1700000000
該当のソースコード
python
1import pandas as pd 2import numpy as np 3 4df = pd.read_csv("ex1.csv",encoding="shift_jis", index_col=0) 5df["yen"] = df["yen"].str.replace(',','').astype(np.int)*10**6
試したこと
読込んだcsvファイルに原因があるのかと思い、下記を実行しました。
また、指数を1~10で行ってみました。
python
1df = pd.DataFrame({'year': ['2015', '2015', '2016', '2016'], 2 'yen': ['4,200', '1,460', '4,700', '1,700']}) 3 4for i in range(1,11): 5 df["y"] = df["yen"].str.replace(',','').astype(np.int)*10**i 6 print(df)
【結果】
- csvを読み込んだコードと、直接コードを書いた結果は同じ
- 1~5乗&10乗:全て累乗計算された
- 6乗:上記「現状」の通り。*10000000で試すが、結果は変わらず
- 7~9乗:全部が累乗されず
次に、カンマが問題なのかと思い、yenを数値にしてみました。
python
1df2 = pd.DataFrame({'year': ['2015', '2015', '2016', '2016'], 2 'yen': [4200, 1460, 4700, 1700]}) 3 4for i in range(1,11): 5 df2["y2"] = df2["yen"]*10**i 6 print(df2)
【結果】 全て累乗計算された
ここまでは分かったのですが、カンマを取るコードに問題があるのか、カンマ付の要素を使用すること自体が原因なのか、その他に何かしらの原因があるのかが分からず、また解決方法にも見当がつかなかったため、ご相談させて頂いた次第です。
どなたか分かる方がいらっしゃいましたら、ご教示のほどよろしくお願い致します。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/24 08:11