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

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

新規登録して質問してみよう
ただいま回答率
85.46%
文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

1回答

1200閲覧

Pythonでカラムの合計値がうまく算出できない e表記を消したい

Shin_go

総合スコア19

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2021/09/27 16:07

編集2021/09/28 00:16

Pythonのデータフレームで、カラムの合計を追加したいのですが、

person_cost.loc['Column_total']= person_cost.sum(numeric_only=True, axis=0)

このコードを追加すると、
1.794090e+09
という表記になってしまいます。添付画像。
eで表記されないような通常の数値にしたいのですが、
どのようなコードを書いたらいいでしょうか。
アドバイスいただければ幸いです。

python

1#医療費データをユーザーごとに集計 2person_cost1 = pd.pivot_table( cost1,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 3person_cost2 = pd.pivot_table( cost2,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 4person_cost3 = pd.pivot_table( cost3,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 5person_cost4 = pd.pivot_table( cost4,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 6person_cost5 = pd.pivot_table( cost5,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 7 8person_cost=pd.merge(person_cost1,person_cost2,left_on='person_number',right_on='person_number',how='inner') 9person_cost=pd.merge(person_cost,person_cost3,left_on='person_number',right_on='person_number',how='inner') 10person_cost=pd.merge(person_cost,person_cost4,left_on='person_number',right_on='person_number',how='inner') 11person_cost=pd.merge(person_cost,person_cost5,left_on='person_number',right_on='person_number',how='inner') 12 13person_cost.loc['Column_total']= person_cost.sum(numeric_only=True, axis=0) 14# person_cost.loc[:,'total'] = person_cost.sum(numeric_only=True, axis=1) 15 16#個人ごとの合計を算出・列を追加 17person_cost["total"]=cost1["cost"]+cost2["cost"]+cost3["cost"]+cost4["cost"]+cost5["cost"] 18 19#個人ごとの平均を算出・列を追加 20person_cost["mean"]=person_cost["total"]/5 21 22#個人ごとの前年増減率を算出・列を追加 23person_cost["YonY_1"]=round((cost2["cost"]-cost1["cost"])/cost1["cost"]*100,1) 24person_cost["YonY_2"]=round((cost3["cost"]-cost2["cost"])/cost2["cost"]*100,1) 25person_cost["YonY_3"]=round((cost4["cost"]-cost3["cost"])/cost3["cost"]*100,1) 26person_cost["YonY_4"]=round((cost5["cost"]-cost4["cost"])/cost4["cost"]*100,1) 27 28person_cost

イメージ説明

python

1#医療費データをユーザーごとに集計 2person_cost1 = pd.pivot_table( cost1,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 3person_cost2 = pd.pivot_table( cost2,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 4person_cost3 = pd.pivot_table( cost3,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 5person_cost4 = pd.pivot_table( cost4,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 6person_cost5 = pd.pivot_table( cost5,index="person_number",values='cost',columns='nendo',aggfunc='sum').reset_index().fillna(0) 7 8person_cost=pd.merge(person_cost1,person_cost2,left_on='person_number',right_on='person_number',how='inner') 9person_cost=pd.merge(person_cost,person_cost3,left_on='person_number',right_on='person_number',how='inner') 10person_cost=pd.merge(person_cost,person_cost4,left_on='person_number',right_on='person_number',how='inner') 11person_cost=pd.merge(person_cost,person_cost5,left_on='person_number',right_on='person_number',how='inner') 12 13 14person_cost.loc['Column_total']= person_cost.sum(numeric_only=True, axis=0) 15# person_cost.loc[:,'total'] = person_cost.sum(numeric_only=True, axis=1) 16 17#個人ごとの合計を算出・列を追加 18person_cost["total"]=cost1["cost"]+cost2["cost"]+cost3["cost"]+cost4["cost"]+cost5["cost"] 19 20#個人ごとの平均を算出・列を追加 21person_cost["mean"]=person_cost["total"]/5 22 23#個人ごとの前年増減率を算出・列を追加 24person_cost["YonY_1"]=round((cost2["cost"]-cost1["cost"])/cost1["cost"]*100,1) 25person_cost["YonY_2"]=round((cost3["cost"]-cost2["cost"])/cost2["cost"]*100,1) 26person_cost["YonY_3"]=round((cost4["cost"]-cost3["cost"])/cost3["cost"]*100,1) 27person_cost["YonY_4"]=round((cost5["cost"]-cost4["cost"])/cost4["cost"]*100,1) 28 29person_cost[[1, 2, 3, 4, 5, 'total']] = person_cost[[1, 2, 3, 4, 5, 'total']].astype(np.int64) 30 31person_cost

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

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

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

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

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

guest

回答1

0

person_cost.sum(numeric_only=True, axis=0)
は、一列でもfloatの列があると、すべての合計可能な列をfloatにしてしまいます。

一番最後に。

python

1import numpy as np 2person_cost[[1, 2, 3, 4, 5, 'total']] = person_cost[[1, 2, 3, 4, 5, 'total']].astype(np.int64)

を入れて、整数型に変換しておくのが一番楽でしょう。

投稿2021/09/27 17:08

ppaul

総合スコア24666

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

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

Shin_go

2021/09/28 00:17

ありがとうございます。 試したみたのですがエラーがでてしまいました。試したコードは本文に追記しています。 エラーは下記の通りですが、何か対処方法あれば教えていただけますか。 ValueError Traceback (most recent call last) <ipython-input-37-8d4816823145> in <module>() 27 person_cost["YonY_4"]=round((cost5["cost"]-cost4["cost"])/cost4["cost"]*100,1) 28 ---> 29 person_cost[[1, 2, 3, 4, 5, 'total']] = person_cost[[1, 2, 3, 4, 5, 'total']].astype(np.int64) 30 31 person_cost 4 frames /usr/local/lib/python3.7/dist-packages/pandas/core/dtypes/cast.py in astype_nansafe(arr, dtype, copy, skipna) 966 967 if not np.isfinite(arr).all(): --> 968 raise ValueError("Cannot convert non-finite values (NA or inf) to integer") 969 970 elif is_object_dtype(arr): ValueError: Cannot convert non-finite values (NA or inf) to integer
ppaul

2021/09/28 00:53

totalの合計にNaNが入っているようですね。 pandasのDataFrameは、列ごとに型があるので、ひとつでもinfとかNaNが入っていると整数にすることはできません。fillna(0)でゼロに置き換えるのでしょう。 totalだけを除外してよいなら、 person_cost[[1, 2, 3, 4, 5]] = person_cost[[1, 2, 3, 4, 5]].astype(np.int64) にすればfillna(0)を行わなくてもできるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問