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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

1879閲覧

pythonで有効数字を揃えたい

rikku_3413

総合スコア11

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

1クリップ

投稿2022/09/25 06:50

前提

 pythonで機械学習を用いた研究をしております。その過程で、どの桁の数値も全て有効数字を揃えて学習する場面があり、そのデータの作成に手間取っています。

実現したいこと

  • PythonでDataframe内のすべての有効数字を揃えたい

 (例:123456と0.567を有効数字2桁→120000と0.56)

  • 桁数を指定して様々な状況に対応できるようにしたい

 (round関数を使用するときのような)

データ一例

ABCD
123456712345.6711
234567823456.7813
345678934560.0118
456789045670.4419

理想のデータ

有効数字2桁で指定した場合

ABCD
120000012005.711
230000023006.813
350000035000.0118
460000046000.4419

試したこと

 pandasのround関数などを用いて下~桁での四捨五入などを試しましたが、やりたいこととは少し違いました。また、以下のようなコマンドも表示を変えるだけで中身自体は変わらないということを知りませんでした。

python

1pd.options.display.float_format = '{:.2g}'.format

補足情報(FW/ツールのバージョンなど)

拙い文章ですが、何か不明点などあれば修正・加筆をするのでどなたかお力添えお願いいたします。

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

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

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

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

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

guest

回答2

0

python

1import pandas as pd 2import io 3from math import ceil, log10 4 5csv_data = ''' 6A,B,C,D 71234567,1234,5.67,11 82345678,2345,6.78,13 93456789,3456,0.01,18 104567890,4567,0.44,19 11''' 12df = pd.read_csv(io.StringIO(csv_data)) 13 14# 15N = 2 16dfx = df.applymap(lambda x: round(x, N-ceil(log10(abs(x))))) 17print(dfx) 18 19# 20 A B C D 210 1200000 1200 5.70 11 221 2300000 2300 6.80 13 232 3500000 3500 0.01 18 243 4600000 4600 0.44 19

投稿2022/09/25 08:08

melian

総合スコア21118

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

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

rikku_3413

2022/09/25 09:24

回答ありがとうございます。 参考にして作業を進めつつ、何か疑問点やつまづきがあった際に再度コメントで質問させていただきいます。
guest

0

ベストアンサー

以下のようにすれば、Pandas.Dataframeの各要素に関数を適用できます。
また、有効数字に丸める関数は自作するのも難しくはないと思いますが、sigfigというモジュールのround関数で実現できます。

python

1import sigfig 2 3df_round = df.applymap(lambda x: sigfig.round(x, 2))

とりあえず2桁で丸めていますが、必要な値にしてください。


ところで「どの桁の数値も全て有効数字を揃えて学習する」のが不思議に思います。そのようなことをすると、精度が下ってしまうのではないかと思うのですが、どのような理由なのでしょう。

投稿2022/09/25 08:02

TakaiY

総合スコア14315

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

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

rikku_3413

2022/09/25 09:23

回答ありがとうございます。 研究の方針で意図的に精度を下げようとしています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問