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

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

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

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

Q&A

解決済

2回答

608閲覧

pythonでcsvファイルから読み取ったデータを計算して別のcsvファイルに出力したい

KNTK

総合スコア2

Python

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

0グッド

0クリップ

投稿2022/06/12 02:23

pythonでcsvファイル内にあるデータを計算し、それを別のcsvファイルに書き出そうと考えています。また計算結果だけでヘッダーがないのでcsvファイルに出力する際にヘッダーも付け加えたいと考えています。計算するコードまではできているのですが、出力のファイルの部分のコードをどうすればよいかわかりません。
現在のコードで実行すると、途中の配列の確認では
3.0 -0.00056636818867
3.00001001358 -0.000566412889621
3.00002002716 -0.000566435456811
3.00003004074 -0.000566435994181
3.0000398159 -0.000566458100776
3.0000500679 -0.000566481232503
3.00006008148 -0.000566437398142
3.00007009506 -0.000566393667723
3.00008010864 -0.00056637196739
3.0000898838 -0.000566372467218
となりますが
最後の確認では
Unnamed: 0 0
0 0 t_list_i
1 1 v_list_i
のようになってしまいます。
これを見出しにtime(s)とB、そして上記のデータを出力したいと考えています。どのようにすればいいかアドバイスよろしくお願い致します。

python

1コード 2```import csv 3import matplotlib.pyplot as plt 4from scipy import integrate 5import pandas as pd 6import numpy as np 7 8 9csv_file = open('csv in/test2.csv') #csvファイルを開く 10csv_reader = csv.reader(csv_file) #開いたcsvファイルからreaderオブジェクトを生成 11t_list = [] #抽出するデータを格納する空のリストを作る 12v_list = [] 13 14for row in csv_reader: #readerオブジェクトをループしてデータ抽出 15 if csv_reader.line_num == 1: #ヘッダー行はスキップする 16 continue #Trueになる1行目はなにもしない 17 t_list.append(row[0]) #row行目の時刻データを格納 18 v_list.append(row[1]) #電圧データを格納 19 20csv_file.close() # csvファイルを閉じる。 21 22t_list_i = [float(s) for s in t_list] #配列は文字列型なのでint型に変換 23v_list_i = [float(s) for s in v_list] 24 25 26for i in range(10): #配列の中身を確認 27 print(t_list[i], v_list[i]) 28 29 30integ = integrate.cumtrapz(v_list_i, t_list_i) #scipyの台形則を利用 31 32for i in range(len(integ)): 33 integ[i] = -integ[i] #式のマイナスの部分 34 35del t_list_i[-1] #リストの長さを揃える 36del v_list_i[-1] #リストの長さを揃える 37 38plt.plot(t_list_i, v_list_i) #横軸をt,縦軸を積分値 39plt.xlabel("T",fontsize=14) 40plt.ylabel("V",fontsize=14) 41plt.xlim(3.0,5.25) 42plt.show() 43 44fig=plt.figure() 45ax=fig.add_subplot(111) 46ax.set_xlim(3.4,4.65) #2番目のデータをプラズマの範囲内にする設定 47 48 49plt.plot(t_list_i, integ) #横軸をt,縦軸を積分値 50plt.xlabel("T",fontsize=14) 51plt.ylabel("B",fontsize=14) 52plt.show() #3,3~4.8s プラズマ そこだけFFT 傾きを構成する 53 54data = ['t_list[i]', 'v_list[i]'] 55#Pandasで、配列をDataFrameに格納 56df = pd.DataFrame(data).to_csv('output.csv') 57 58df_header = pd.read_csv('output.csv') 59print(df_header)

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

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

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

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

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

guest

回答2

0

python

1import pandas as pd 2 3t_list = [ 4 3.0, 3.00001001358, 3.00002002716, 3.00003004074, 3.0000398159, 5 3.0000500679, 3.00006008148, 3.00007009506, 3.00008010864, 3.0000898838, 6] 7v_list = [ 8 -0.00056636818867, -0.000566412889621, -0.000566435456811, -0.000566435994181, -0.000566458100776, 9 -0.000566481232503, -0.000566437398142, -0.000566393667723, -0.00056637196739, -0.000566372467218, 10] 11 12# 13pd.DataFrame(zip(t_list, v_list)).to_csv('output.csv', index=False, header=['time(s)', 'B']) 14df_header = pd.read_csv('output.csv') 15 16pd.options.display.precision = 15 17print(df_header) 18 19# 20 time(s) B 210 3.00000000000 -0.000566368188670 221 3.00001001358 -0.000566412889621 232 3.00002002716 -0.000566435456811 243 3.00003004074 -0.000566435994181 254 3.00003981590 -0.000566458100776 265 3.00005006790 -0.000566481232503 276 3.00006008148 -0.000566437398142 287 3.00007009506 -0.000566393667723 298 3.00008010864 -0.000566371967390 309 3.00008988380 -0.000566372467218

投稿2022/06/12 02:53

melian

総合スコア19714

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

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

KNTK

2022/06/12 02:58

途中の配列の確認用データについてなのですが、表示されてないだけでもっとデータがあります。数値を直接リストに入れるのは現実的でないような気がするのですが、この場合どうすればよいでしょうか?
melian

2022/06/12 06:32 編集

最初からデータフレームに格納してしまうのはどうでしょうか。 csv_file = open('csv in/test2.csv') => df = pd.read_csv('csv in/test2.csv') df.columns = ['time(s)', 'B']
KNTK

2022/06/14 04:28

test2から読み取った値を台形則に従い計算しています。またtest2のファイルにはヘッダーがついているのですが、先にヘッダーを書き換えてしまうということですか?
melian

2022/06/14 04:36

ヘッダ行を置き換えるのは CSV へ出力する直前でも構いません。また、台形則の計算はデータフレームを使っても可能かと思います。
KNTK

2022/06/14 05:10

先にコメントいただいた方の方法でうまくいったのでそちらの方をベストアンサーとさせていただきましたが、別の方法でもできる、知識を蓄えるという点でこちらの方法も試させていただきます。ありがとうございました!
guest

0

ベストアンサー

以下のような感じで列名を指定してt_list, v_listからDataFrameを作成すればよいです。

Python

1import pandas as pd 2 3t_list = [1,2] 4v_list = [3,4] 5 6df = pd.DataFrame({'time(s)':t_list, 'B':v_list}) 7df.to_csv('ret.csv', index=False) 8""" 9time(s),B 101,3 112,4 12"""

投稿2022/06/12 02:31

can110

総合スコア38262

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

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

KNTK

2022/06/12 02:55

これはt_list=[1,2]の[]の部分にt_list_iを入れるということですか?
can110

2022/06/12 03:13

いえ。t_list=[1,2]はテスト用なのでその必要はありません。 質問コードのt_list, v_listをそのまま使ってください。
KNTK

2022/06/14 05:09

うまくいきました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問