前提
質問させて頂きたいです。よろしくお願い致します。
名称「Aフォルダ」内に複数のcsvファイルがあります。ファイル名は「0000583A.CSV」などです。
csvファイルは下記のような構成になっていて、一番左のTIME列が0.1秒刻みでデータを取得している時系列データとなっています。
pythonで「Aフォルダ」内のcsvファイル(例えば0000583A.CSV)を読み込み、それぞれのファイルのデータを3秒ごとに平均化して「Bフォルダ」に「0000583Ac.CSV」(末尾に小文字c追加)のようなファイル名で出力保存したいです。
コードを書いていて、いくつかのエラーが出てしまいました。
これらのエラーの発生原因と対策方法を教えて頂きたいです
①「NameError: name 'df' is not defined」
②「pandas.errors.ParserError: Error tokenizing data. C error: out of memory」
③「AttributeError: 'NoneType' object has no attribute 'resample'」
また最後のコードでCSVファイルが出力されるところまでいったのですが、「平均化したTIME列が消えてしまった」「複数のファイルを出力保存したいが1個のoutput.csvファイルしか出力保存されない」といった問題があり、対策方法を教えて頂きたいです。
このようなことを行いたい背景としては、1つ5~6メガのファイルを複数結合してBIツールで可視化分析したいのですが、pythonで実行するとファイル容量が大きすぎるのかメモリ不足が出てしまいます。
そこで0.1秒ごとのデータ取得を3秒ごとに圧縮すれば解決できるかと思いました。
最初から3秒毎でデータを取得するようにすれば良いかもしれませんが、3秒区切りでデータ分析に活用できるか不明なためデータは0.1秒で取得したいと思っています。
※5~6MBくらいのCSVファイルが週に800個ほど「Aフォルダ」に貯まっていく
文字数オーバーしてしまうのでcsvファイルの構成はコメント欄に記載します
実現したいこと
pythonで「Aフォルダ」内のcsvファイル(例えば0000583A.CSV)を読み込み、それぞれのファイルのデータを3秒ごとに平均化して「Bフォルダ」に「0000583Ac.CSV」のようなファイル名で出力保存したいです。
発生している問題・エラーメッセージ
①「NameError: name 'df' is not defined」
②「pandas.errors.ParserError: Error tokenizing data. C error: out of memory」
③「AttributeError: 'NoneType' object has no attribute 'resample'」
下記コードで①~③で変更した部分を分けて書いています
また最後のコードでCSVファイルが出力されるところまでいったのですが、「平均化したTIME列が消えてしまった」「複数のファイルを出力保存したいが1個のoutput.csvファイルしか出力保存されない」といった問題があり、対策方法を教えて頂きたいです。
該当のソースコード
python
1 2from pathlib import Path 3import pandas as pd 4 5#read_dataという名前の関数を作成する、filenameは引数であり関数の処理に渡される値 6def read_data(filename): 7 # dataという名前のリストを作成する処理を行う 8 data = [] 9 10---------------------------csv出力できた時のコード------------------------------------------ 11# fileが変数、filenameがオブジェクト、のループ処理を行う、次の読み込み処理でfileという変数にfilenameというオブジェクトの中の要素(結合したいcsvファイル名)を入れていく 12 for file in filename: 13 # 処理内容、今回はcsvファイルをpythonに読み込む、pd.read_csvでcsv形式のファイルをPandasのDataFrameへ読み取ってfile_dataという要素名に定義する、fileにはcsvファイル名が入る、headerは先頭行を3行目に指定、encodingは文字コード指定 14 df = pd.read_csv(file, encoding="cp932",skiprows=2,sep=',',index_col=0,parse_dates=True) 15 #定義された要素名file_dataをdataリストに追加 16 data.append(df) 17 #merge_dataという名前の結合されたリスト、を作るためのpd.concatという関数を行う、dataは結合する物=リストを示す、join=innerは内部結合=つのテーブルの合体可能なデータのみ取り出すことを示す 18 averaged_data = df.resample('3S').mean() 19 return averaged_data 20------------------------------------------------------------------------------------------------ 21 22-----------------csv出力できなかったとき(①~③エラーの時)のコード-------------------- 23 # fileが変数、filenameがオブジェクト、のループ処理を行う、次の読み込み処理でfileという変数にfilenameというオブジェクトの中の要素(結合したいcsvファイル名)を入れていく 24 for file in filename: 25 # 処理内容、今回はcsvファイルをpythonに読み込む、pd.read_csvでcsv形式のファイルをPandasのDataFrameへ読み取ってfile_dataという要素名に定義する、fileにはcsvファイル名が入る 26 file_data = pd.read_csv(file, encoding="cp932",skiprows=2,sep=',',index_col=0,parse_dates=True) 27 #定義された要素名file_dataをdataリストに追加 28 data.append(file_data) 29------------------------------------------------------------------------------------------------ 30 31 32------------------------------①エラーのとき-------------------------------------------------- 33 #averaged_dataという名前の平均化されたリストを作成 34 averaged_data = df.resample('3S').mean() 35 return averaged_data 36------------------------------------------------------------------------------------------------ 37 38------------------------------②エラーのとき-------------------------------------------------- 39 #averaged_dataという名前の平均化されたリストを作成 40 df = read_data(filename) 41 averaged_data = df.resample('3S').mean() 42 return averaged_data 43------------------------------------------------------------------------------------------------ 44 45------------------------------③エラーのとき-------------------------------------------------- 46 #averaged_dataという名前の平均化されたリストを作成 47 df = data.append(file_data) 48 averaged_data = df.resample('3S').mean() 49 return averaged_data 50------------------------------------------------------------------------------------------------ 51 52------------------------------csv出力できたとき---------------------------------------------- 53 #averaged_dataという名前の平均化されたリストを作成 54 df = data.append(file_data) 55 averaged_data = df.resample('3S').mean() 56 return averaged_data 57------------------------------------------------------------------------------------------------ 58 59# データの読み込み 60#Path関数を使用してファイルパスをp_Aという変数に指定 61p_A = Path("Aフォルダ") 62#glob関数を用いることでp_A = Pathのフォルダの中のcsv形式のファイル名を取得してdata_filesという名前でリスト化する 63data_files = list(p_A.glob("*.csv")) 64#上記で作成したread_data関数にdata_files引数を代入して、_input_data_Aという名前で結合したリストを作成 65_input_data_A = read_data(data_files) 66 67 68# A/B情報の書き込み 69#drop関数を用いて「Trigger」列を削除、assign関数を用いて「A」列を挿入したinput_data_Aというリストを作成 70input_data_A = _input_data_A.drop(columns='Trigger') 71 72# 平均化データの書き込み 73#to_csvでデータフレームのデータをcsvファイルに書き込む、()の中にファイルパス/ファイル名.csvで指定、now.strftime関数を用いて現在時刻をファイル名に追加 74input_data_A.to_csv("Bフォルダ/output" + ".csv", index=False, encoding="utf-8-sig") 75 76
試したこと
上記①~③と出力できた際ののエラー出た際のコード変更
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー