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

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

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

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

Q&A

解決済

2回答

2141閲覧

python decimalでcsvを読みこみたい

Tubasa1995

総合スコア83

Python

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

1グッド

0クリップ

投稿2018/12/30 03:44

編集2018/12/30 04:44

前提・実現したいこと

出力がほしいものとはことなっていました.
1_1-7701_history.csvは本来7701行+ヘッダーの1行目,7201列あります.
しかし,下記の計算をして得られる最初の値は

-0.166846583になってほしいのですが,微妙にずれて-0.166741725
というような値になります.
何かコードのミスがあるのでしょうか.
ぼくのコードでは最初の1行目のtimestepと書かれた行は読まれない認識で大丈夫ですか?

本来やりたい計算は

y=y(i,j)+(2500/24)*((y(i+1,j)-2y(i,j)+y(i-1,j)/2500 + (y(i,j+1)-2y(i,j)+y(i,j-1)/2500))なのですが,コードは間違っていますか?

decimalを使用すればよいとのことなのですが,
私の書いたコードではエラーが出るのですが
これは何がいけないのでしょうか?

素人のためあまりわかっていません.すいません.勉強中です.

イメージ説明

##作成したコード

import numpy as np import pandas as pd from decimal import Decimal data = pd.read_csv("1_23104-30804_history.csv").values.tolist() decimaldata = Decimal("data") list = [] filterrange = Decimal("8.0") deltax = Decimal("2.0") deltay = Decimal("2.0") a = filterrange*filterrange/Decimal("24.0") for j in range(7201): for i in range(7597): x = data[i+52][j] + a*(((data[i+53][j] - 2*data[i+52][j] + data[i+51][j])/(deltax*deltax)) + ((data[i+103][j] - 2*data[52][j] +data[i+1][j])/(deltay*deltay))) list.append(x) np.savetxt('deimal test_200_23104-30804_history.csv', list, delimiter=',') ## 1_23104-30804_history.csv

timestep
-0.84728
-0.95114
-0.79644
-0.77996
-0.67011
-0.82191
-0.74084
-1.5601
-0.76074
-0.98542
-1.3009
-0.5609
-0.64079
-0.92658
-0.70318
-0.85883
-0.82323
-0.63173
-0.61962
-1.1397
-1.2825
-0.64368
-0.64733
-0.58441
-0.68703
-0.73336
-1.1853
-0.47988
-1.0905
-1.0431
-1.2478
-1.0764
-1.2152
-1.211
-0.65762
-0.52679
-0.50093
-0.64618
-0.52306
-0.33061
-0.48963
-0.41828
-1.0891
-0.39603
-1.0711
-0.52733
-0.37916
-0.52217
-0.14342
-1.0873
-1.0399
-0.88322
-0.10131
-0.08455
-0.10721
0.028953
-0.12311
-0.065425
-0.20617
-0.082956
-0.032831
-0.056293
-0.04874
-0.014266
-0.045869
-0.12502
-0.012356
0.019462
0.034668
0.030992
0.036706
0.065337
0.09325
0.074081
0.12033
0.00088224
0.068295
0.12823
0.092159
0.062422
0.17616
0.15121
0.17839
0.1971
0.20163
0.21746
0.25111
0.23748
0.31161
0.27771
0.26351
0.33324
0.32294
0.29546
0.28425
0.33134
0.36748
0.49872
0.42924
0.45518
0.37397
-0.87739
-0.63376
-0.059208
0.088382
0.12132
0.15218
0.19531

bochan2👍を押しています

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

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

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

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

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

can110

2018/12/30 03:51

decimalの基本的な使い方はご理解されているでしょうか? 具体的に分からないことを記載すると回答得られるかもしれません。
Tubasa1995

2018/12/30 04:43

すいません.質問させてください. いろいろ調べたのですが, csvファイル等を読み込んでそれをdecimal表記にするという例が全く見当たらないです. どうかご教授おねがいできませんか.
guest

回答2

0

まずは、「python decimal」でぐぐって、でてくるものを一通り読んでみましょう。
基本的な使い方をまず覚えるようにしましょう

投稿2018/12/30 04:51

y_waiwai

総合スコア87719

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

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

0

ベストアンサー

csvファイル等を読み込んでそれをdecimal表記にするという例が全く見当たらないです.

自力でコードを書く必要があります。
CSVから数字の文字列をリストとして取得済みとすると、たとえば以下のように書けます。

Python

1from decimal import Decimal 2l = ['1','2','3'] 3print(l) # ['1', '2', '3'] 4l = [Decimal(i) for i in l] 5print(l) # [Decimal('1'), Decimal('2'), Decimal('3')] 6s = sum(l) 7print(type(s),s) # <class 'decimal.Decimal'> 6

投稿2018/12/30 04:50

can110

総合スコア38233

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

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

Tubasa1995

2018/12/30 07:05

import numpy as np import pandas as pd from decimal import Decimal data = pd.read_csv("1_23104-30804_history.csv").values.tolist() data = [Decimal(i) for i in data] print(data) これでエラーが出るのは何故ですか? 回答者様と何が違いますか?
Tubasa1995

2018/12/30 07:06

should have exactly three elementsとはどういうことなのでしょうか.
can110

2018/12/30 07:18

エラー内容すら分からないので何ともいえません。 [Decimal(i) for i in data]のdataが多重リストになっていたりするんじゃないでしょうか? 「should have exactly three elements」とは何のことでしょうか? まずは単純なCSVの読み書きふくめ、基礎的なところから習得することを強くお勧めします。
Tubasa1995

2018/12/30 07:21

decimalは3つの要素しか扱えないという意味ですか.
can110

2018/12/30 07:29

「decimalは3つの要素しか扱えない」と考えた理由を説明ください。 あるいは回答コードのリストの要素数を4つに増やして試してみてください。 なお、いったんご自身の考えを整理したうえでコメントください。
Tubasa1995

2018/12/30 10:46

書き直して計算もまわりますが,なぜか値が変わりません. いったい何が原因なのでしょうか. import numpy as np import pandas as pd import decimal as dec data = pd.read_csv("1_23104-30804_history.csv").values.tolist() list = [] filterrange = dec.Decimal(8) deltax = dec.Decimal(2) deltay = dec.Decimal(2) a = filterrange*filterrange/24 for j in range(2): for i in range(7597): a1 = dec.Decimal(data[i+51][j]) a2 = dec.Decimal(data[i+52][j]) a3 = dec.Decimal(data[i+53][j]) a4 = dec.Decimal(data[i+103][j]) a5 = dec.Decimal(data[52][j]) a6 = dec.Decimal(data[i+1][j]) x = a2 + a*(((a3 - 2*a2 + a1)/(deltax*deltax)) + ((a4 - 2*a5 +a6)/(deltay*deltay))) list.append(x) np.savetxt('shimo5_23104-30804.csv', list, delimiter=',')
can110

2018/12/30 10:55

私のコメントは無視ですか?
Tubasa1995

2018/12/30 11:13

エラーメッセージにこのような言葉:should have exactly three elementsが出たからそう思っただけなんです.すいません.
can110

2018/12/30 11:26

どこでエラーが出たのか分かりませんが了解です。 この質問で回答できることはしたので、あとは自力で解決されるか別途質問を立ててください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問