質問: df2["yen"]*10**i print(df2) ``` 【結果】 全て累乗計算された --- ここまでは分かったのですが、カンマを取るコードに問題があるのか、カンマ付の要素を使用すること自体が原因なのか、その他に何かしらの原因があるのかが分からず、また解決方法にも見当がつかなかったため、ご相談させて頂いた次第です。 どなたか分かる方がいらっしゃいましたら、ご教示のほどよろしくお願い致します。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
回答: 環境がわからないのですが、`np.int`が32bitの整数のため、オーバーフローを起こしていると思われます。 32bit整数の最大値は2147483647なので、これを超える数値はあらわせません。 64bitの整数で計算すれば解決します。 ``` df = pd.DataFrame({'year': ['2015', '2015', '2016', '2016'], 'yen': ['4,200', '1,460', '4,700', '1,700']}) for i in range(1,11): df["y"] = df["yen"].str.replace(',','').astype(np.int64)*10**i print(df) ``` 6~9乗でオーバーフローがおこり、10乗でうまく動いているのは、 `10**9`までの数値の掛け算は 32bit × 32bit → 32bit で計算されているのに対して、 `10**10`は32bitを超えるため64bitの整数として扱われて、32bit × 64bit → 64bit で計算されているためです。 また、後者の`df2`がうまく動いているのは、最初から`df2["yen"].dtype`が`np.int64`になっているためです。