前提
pythonで、ファイルを解凍し、ある特定の名前のtsvファイル(複数ある)の指定列において、条件を満たす数値の数を計算し、それを全てのファイルで合計したい。
実現したいこと
pythonで、
あるディレクトリ内にある複数のtar.gzファイルを全て解凍する
↓
解凍した各tarファイルをそれぞれ元の名前が付けられたディレクトリにいれる
↓
各tarファイルから解凍されたファイルがあるディレクトリから、ある特定の名前のtsvファイルを取り出す
↓
取り出した各ファイルの、指定列の数値を参照する
↓
その列の数値の内、条件を満たす数値の数を数える。
↓
各ファイルで計算したその数値を全て足し合わせる。
発生している問題・エラーメッセージ
※ 現在の問題
現在、ループする各ファイルで、指定列の条件を満たす数値が全ファイル分出ています。
最後に、各ファイルで計算されたこの数値を全て足し合わせたものを表示したいのですが、方法が分かりません。
以下、過去のエラーです。既に解決しました。
まず、コードを実行してもvscodeの出力欄に合計数が出力されません。
初心者ですので、コードが間違っているか、vscodeの環境設定が間違っているかわかりません。稚拙な質問で申し訳ございません... *解決済み
※melianさんの助言に基づいたコードの変更後 *解決済み
修正後のエラーメッセージ(このメッセージの前にtsvファイルの内容らしきものがターミナルにあった。)
Traceback (most recent call last): File "c:\case study\apply date check.py", line 16, in <module> aymd = (20210401<= df['app_year_month_day'] <=20210430).sum() File "C:\Py\python39\lib\site-packages\pandas\core\generic.py", line 1527, in __nonzero__ raise ValueError( ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
※ TakaiY さんの一度目の助言に基づいたコードの変更後 *解決済み
FileNotFoundError: [Errno 2] No such file or directory: 'JPWRP_20220413.tar.gz'
このディレクトリ名は後半のfor文の2番目です。エクスプローラーで確認したところ、この名前のフォルダがあったので、なぜこのディレクトリが見つからないと出ているのか分かりません。
※ TakaiY さんの二度目の助言に基づいたコードの変更後 *解決済み
現在、ループする各ファイルで、全ての列で条件を満たす値の数がが出てしまいます。
(1列目=5, 2列目=8,3列目=43,... のような感じで)
これを、指定列(app_year_month_dayの列)のみ表示し、最後に、この各ファイルで計算されたこの指定列の数値を全て足し合わせたものを表示したいのですが、方法が分かりません。
該当のソースコード
python
1import os 2import tarfile 3import glob 4import csv 5os.chdir(r"C:\case study\applying date check") #解凍元があるディレクトリ 6tar_gz_files = glob.glob('*.tar.gz') #拡張子が.tar.gzのファイルを全て捕捉 7 8for file in tar_gz_files: #上記ファイル全てで以下の作業を行なう 9 os.chdir(r"C:\case study\applying date check") #解凍元があるディレクトリに戻る 10 with tarfile.open(file) as tar: #ファイルを解凍 11 tar.extractall('C:\\case study\\after defrost\\'+ file) #解凍元ファイルと同じ名前のディレクトリを作成し解凍先に指定 12 os.chdir(r"C:\case study\after defrost\\" +file +'\\JPWRP') #解凍された中に何故かJPWRPというディレクトリが出来ているため、その中へパスを変更 13 import pandas as pd 14 df= pd.read_csv('upd_mgt_info_p.tsv',delimiter='\t') #目的の名前がついているファイルを読み込む 15 print(df) #読み込んだファイルを表示 16 print(df.columns) #ここがあまり分かっていないが、各列のヘッダーを表示? 17 aymd = ((df['app_year_month_day'] >= 20210401) & (df['app_year_month_day'] <=20210430)).sum() #任意の列において、ある範囲にある数値が何個あるか数える。 18 print('num_data='+str(aymd)) #その指定列に条件を満たす値がいくつあったか表示 19 #最後に各ファイルで計算した値を全て足し合わせ、表示したい 20 21 22
試したこと※現在
前半部分のみ試してみると上手く解凍ファイルが各ディレクトリに収まってました。
後半部分を実行すると、ループする各ファイルで、指定列の条件を満たす数値が全ファイル分出ています。
最後に、この各ファイルで計算されたこの指定列の数値を全て足し合わせたものを表示したいのですが、方法が分かりません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー