##完成版
python
1import pandas as pd
2from openpyxl import Workbook
3import glob
4
5file_list=glob.glob('//192.168.1.4/pi/mydata202107*')#7月の稼働率ファイルを全て取り込み
6print(file_list)
7
8l=[] # 一日毎に記録するためのリストを用意
9for file in file_list: #7月の稼働率ファイルを一日毎処理
10 df = pd.read_csv(file) # CSV読み込み、データフレーム化
11 d=(file[23:31]) # 日付の取得
12 df[3]=df[1]==df[2] # 完全停止時間
13 df=df.set_index(0) # 時間列をインデックスに退避
14 # '日付','稼働時間','無人稼働時間','完全停止時間','カウント' のリストを作成
15 l.append([d] + df.sum().to_list() + [df.sum().sum()])
16
17df=pd.DataFrame(l) #データをpandasに変更
18
19df.columns=['日付','稼働時間','無人稼働時間','完全停止時間','カウント']
20df['稼働率']=(df['稼働時間'] / df['カウント'] * 100).round(1)
21
22filename = d[:6] + '.xlsx'
23
24df_excel=df.drop(['完全停止時間','カウント'],axis=1)
25df_excel['稼働時間']=df_excel['稼働時間'].astype(str) + '分'
26df_excel['無人稼働時間']=df_excel['無人稼働時間'].astype(str) + '分'
27df_excel['稼働率']=df_excel['稼働率'].astype(str) + '%'
28
29df_excel.to_excel(filename) # 書き込み
concatenating-objects
リンク先に参考になる情報があります。
python
1df_list=[]
2for file in file_list:#7月の稼働率ファイル全てに繰り返し処理で集計したい
3 df_list.append(pd.read_csv(file))
4
5df=pd.concat(df_list)
このようにいったん全てのファイルをデータフレームのリストに格納して、pandas.DataFrame.concat
で一括処理した後所用の集計を実施してみてはどうでしょうか?
python
1data="""index data
20 日付20210701
31 稼働時間96分
42 無人稼働時間0分
53 稼働率100.0%
64 日付20210702
75 稼働時間299分
86 無人稼働時間0分
97 稼働率99.7%
108 日付20210703
119 稼働時間777分
1210 無人稼働時間1分
1311 稼働率99.7%"""
14import io
15import pandas as pd
16
17df = pd.read_csv(io.StringIO(data),sep=' ')
18df['index']=df['index']//4
19df.index=df.index % 4
20df.pivot(columns='index',values='data').T
いちおうやってみましたが、お勧めしません
他の方も書いていますが、まず、csvの中身を提示してください
日付、稼働時間、無人稼働時間、稼働率のヘッダーの下にデータがあるのが自然な形だと思いますが、
データフレームにするまでに色々とやりすぎてデータが変になっています。
python
1data="""21:23 1 0
221:24 1 0
321:25 1 0
421:26 1 0
521:27 1 0
621:28 1 0
721:29 1 0
821:30 1 0
921:31 1 0
1021:32 1 0
1121:33 1 0
1221:34 1 0
1321:35 1 0
1421:37 1 0
1521:38 1 0
1621:39 1 0
1721:40 1 0"""
18
19import io
20import pandas
21
22l=[]
23
24d="20210701" # 日付データの抽出に変えてください
25df = pd.read_csv(io.StringIO(data),header=None,sep=' ') # 読み込み
26df[3]=df[1]==df[2] # 完全停止時間の列作成
27df=df.set_index(0) # 計算用に時間をindexに退避
28
29l.append([d] + df.sum().to_list() + [df.sum().sum()]) # count()の分を3つのデータの足し算で代替
30l # 日付、稼働時間、無人稼働時間、完全停止時間、カウント
31
途中までですがここで投稿しておきます。
いったんファイルを読み込んだあと、このような変更をすると注釈に書いたリストができます。
forで日付の作成からデータフレーム作成、リスト追記をしていって
全部処理を終わった後、最初に書いたpd.DataFrame.concatpd.DataFrame
で一括処理が可能です。
(各行が入ったリストをデータフレームにするので、こちらでしたね。)
稼働率は全部一緒になった後のデータフレームでも、1行1日になっていますし、すぐ出ます。