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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

pandas

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1182閲覧

3列目に0の列を加えたいです。

happy_boy

総合スコア9

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Python

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

pandas

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/10/01 00:34

前提・実現したいこと

以前の質問の続きのなのですが、物理学の研究で、時間に対する電圧の変化をデータで測定しました。その電圧の平均的な時間変化をエラー付きで求めようとしています。

~やりたいこと~
Python3でpandasを用いて複数のファイルを読み込んで、その右側の配列を結合します。そして列ごとの合計で列ごとの各要素を割ることで電圧を正規化し、それを同じ時間で足すことにより平均的な時間変化を求めています。その結果を新しいファイルに書き込みたいです。

後述のプログラムでの結果で

result

1-2e-05 -0.3139681746489832 0.03213016038827265 2-1.99e-05 -0.2830131495821651 0.02709025052961652 3-1.98e-05 -0.30594607855274103 0.03443808408653539 4-1.97e-05 -0.25958609416911127 0.029006046680498967 5-1.96e-05 -0.29720814091320474 0.04062013585310722 6

という出力ファイルができるのですが、これを

result

1-2e-05 -0.3139681746489832 0 0.03213016038827265 2-1.99e-05 -0.2830131495821651 0 0.02709025052961652 3-1.98e-05 -0.30594607855274103 0 0.03443808408653539 4-1.97e-05 -0.25958609416911127 0 0.029006046680498967 5-1.96e-05 -0.29720814091320474 0 0.04062013585310722 6

このように3列目に0の数字列を付け加えたいです。

###読み込むファイル
このようなCSVファイルをあるだけ読み込んでおります。

CSV

1Record Length,2.500000e+03,, -0.000025000000, 0.00000, 2Sample Interval,1.000000e-07,, -0.000024900000, 0.00800, 3Trigger Point,2.500000000000e+02,, -0.000024800000, 0.00000, 4,,, -0.000024700000, 0.00000, 5,,, -0.000024600000, 0.01600, 6,,, -0.000024500000, 0.01600, 7        ︙ 8,,,00.000224700000, 0.00000, 9,,,00.000224800000, 0.00800, 10,,,00.000224900000, 0.01600,

該当のソースコード

Python3

1import pandas as pd 2import glob 3import os 4import math 5import csv 6 7adf = glob.glob("*.CSV") 8li = [] 9for filename in adf: 10 df = pd.read_csv(filename, names=("0","1","2","3","4","5")) 11 df3 = df.set_index("3") 12 df2 = df3.iloc[50:2250] 13 df1 = df2.drop(df.columns[[0,1,2,5]], axis=1) 14 li.append(df1) 15 16df1 = pd.concat(li, axis=1, ignore_index=True) 17 18path = os.getcwd() 19files = os.listdir(path) 20count = len(files) 21 22df_pr = df1.apply(lambda li:li/sum(abs(li)/count)) 23 24result = df_pr.T.describe() 25result_mean = df_pr.T.mean() 26result_sum = df_pr.T.sum() 27result_cov = df_pr.T.cov() 28result_std = df_pr.T.std() 29 30result = pd.concat([result_mean,result_std/math.sqrt(count)],axis=1) 31result.to_csv("result.dat", header=None, sep=" ")

試したこと

一応自分なりに調べたのですが、少し前のことでその作成したプログラムがどこか行ってしまいました。

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

ubuntu:18.04
Python:3.6.9
pandas:1.0.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

ファイルに書き込むデータフレームresultができてから、insertで好きな位置に列を挿入してください。

以下では、提示されたコードの前半の処理は今回の問題に関係ないので省略して、いままでのresultの内容を直接生成しています。

Python

1import pandas as pd 2import io 3 4txt = """ 5-2e-05 -0.3139681746489832 0.03213016038827265 6-1.99e-05 -0.2830131495821651 0.02709025052961652 7-1.98e-05 -0.30594607855274103 0.03443808408653539 8-1.97e-05 -0.25958609416911127 0.029006046680498967 9-1.96e-05 -0.29720814091320474 0.04062013585310722 10""" 11 12result = pd.read_table(io.StringIO(txt), sep=' ', header=None) 13# print(result) 14 15# result生成後に 16result.insert(2, '', 0) 17# print(result) 18result.to_csv("result.dat", header=None, index=None, sep=" ")

result.datの内容は、

-2e-05 -0.3139681746489832 0 0.03213016038827265 -1.99e-05 -0.2830131495821651 0 0.027090250529616517 -1.98e-05 -0.30594607855274103 0 0.03443808408653539 -1.9699999999999998e-05 -0.2595860941691113 0 0.02900604668049897 -1.9600000000000002e-05 -0.29720814091320474 0 0.04062013585310722

投稿2020/10/01 00:59

Daregada

総合スコア11990

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

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

happy_boy

2020/10/01 05:39

ご回答ありがとうございます。 result = pd.concat([result_mean,result_std/math.sqrt(count)],axis=1) result.to_csv("result.dat", header=None, sep=" ") の後に、それを書き込めばよいということですよね? その場合は result = pd.read_table(io.StringIO(txt), sep=' ', header=None) のtxtの部分はどのように変えればよいでしょうか? datとかcsvに変えてみたのですができなく、全然わからないです。すみません。
Daregada

2020/10/01 05:49

いえ、 result = pd.concat([result_mean,result_std/math.sqrt(count)],axis=1) で(0を挿入する前の)resultが出来上がっているので、その直後に result.insert(2, '', 0) だけを挿入し、その後で、 result.to_csv("result.dat", header=None, sep=" ") でファイルに書き込む、という流れです。ああ、resultのindexが何かによって、insertの数値2(挿入位置を示す)を変える必要があるかもしれません。 それより前の部分は、あなたのコードでは必要ありません。本来なら計算して作られるデータフレームの値が直接書いてあるtxtから読み込んでいるだけです
happy_boy

2020/10/01 06:15

できました!!ありがとうございます。とても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問