回答編集履歴

4

完成

2021/07/11 10:34

投稿

toshikawa
toshikawa

スコア388

test CHANGED
@@ -1,3 +1,73 @@
1
+ ##完成版
2
+
3
+
4
+
5
+ ```python
6
+
7
+ import pandas as pd
8
+
9
+ from openpyxl import Workbook
10
+
11
+ import glob
12
+
13
+
14
+
15
+ file_list=glob.glob('//192.168.1.4/pi/mydata202107*')#7月の稼働率ファイルを全て取り込み
16
+
17
+ print(file_list)
18
+
19
+
20
+
21
+ l=[] # 一日毎に記録するためのリストを用意
22
+
23
+ for file in file_list:  #7月の稼働率ファイルを一日毎処理
24
+
25
+ df = pd.read_csv(file) # CSV読み込み、データフレーム化
26
+
27
+ d=(file[23:31]) # 日付の取得
28
+
29
+ df[3]=df[1]==df[2] # 完全停止時間
30
+
31
+ df=df.set_index(0) # 時間列をインデックスに退避
32
+
33
+ # '日付','稼働時間','無人稼働時間','完全停止時間','カウント' のリストを作成
34
+
35
+ l.append([d] + df.sum().to_list() + [df.sum().sum()])
36
+
37
+
38
+
39
+ df=pd.DataFrame(l) #データをpandasに変更
40
+
41
+
42
+
43
+ df.columns=['日付','稼働時間','無人稼働時間','完全停止時間','カウント']
44
+
45
+ df['稼働率']=(df['稼働時間'] / df['カウント'] * 100).round(1)
46
+
47
+
48
+
49
+ filename = d[:6] + '.xlsx'
50
+
51
+
52
+
53
+ df_excel=df.drop(['完全停止時間','カウント'],axis=1)
54
+
55
+ df_excel['稼働時間']=df_excel['稼働時間'].astype(str) + '分'
56
+
57
+ df_excel['無人稼働時間']=df_excel['無人稼働時間'].astype(str) + '分'
58
+
59
+ df_excel['稼働率']=df_excel['稼働率'].astype(str) + '%'
60
+
61
+
62
+
63
+ df_excel.to_excel(filename) # 書き込み
64
+
65
+ ```
66
+
67
+ ------
68
+
69
+
70
+
1
71
  [concatenating-objects](https://pandas.pydata.org/docs/user_guide/merging.html#concatenating-objects)
2
72
 
3
73
 

3

間違いの修正

2021/07/11 10:34

投稿

toshikawa
toshikawa

スコア388

test CHANGED
@@ -168,8 +168,10 @@
168
168
 
169
169
  forで日付の作成からデータフレーム作成、リスト追記をしていって
170
170
 
171
- 全部処理を終わった後、最初に書いた`pd.DataFrame.concat`で一括処理が可能です。
171
+ 全部処理を終わった後、最初に書いた~~pd.DataFrame.concat~~`pd.DataFrame`で一括処理が可能です。
172
+
173
+ (各行が入ったリストをデータフレームにするので、こちらでしたね。)
172
174
 
173
175
 
174
176
 
175
- 稼働率は全部一緒になった後のデータフレームでもすぐ出ますので大丈夫です
177
+ 稼働率は全部一緒になった後のデータフレームでも、1行1日になっていまし、すぐ出ます。

2

CSVデータの処理の仕方を追記

2021/07/11 10:07

投稿

toshikawa
toshikawa

スコア388

test CHANGED
@@ -85,3 +85,91 @@
85
85
  **日付、稼働時間、無人稼働時間、稼働率**のヘッダーの下にデータがあるのが自然な形だと思いますが、
86
86
 
87
87
  データフレームにするまでに色々とやりすぎてデータが変になっています。
88
+
89
+
90
+
91
+ ------
92
+
93
+
94
+
95
+ ```python
96
+
97
+ data="""21:23 1 0
98
+
99
+ 21:24 1 0
100
+
101
+ 21:25 1 0
102
+
103
+ 21:26 1 0
104
+
105
+ 21:27 1 0
106
+
107
+ 21:28 1 0
108
+
109
+ 21:29 1 0
110
+
111
+ 21:30 1 0
112
+
113
+ 21:31 1 0
114
+
115
+ 21:32 1 0
116
+
117
+ 21:33 1 0
118
+
119
+ 21:34 1 0
120
+
121
+ 21:35 1 0
122
+
123
+ 21:37 1 0
124
+
125
+ 21:38 1 0
126
+
127
+ 21:39 1 0
128
+
129
+ 21:40 1 0"""
130
+
131
+
132
+
133
+ import io
134
+
135
+ import pandas
136
+
137
+
138
+
139
+ l=[]
140
+
141
+
142
+
143
+ d="20210701" # 日付データの抽出に変えてください
144
+
145
+ df = pd.read_csv(io.StringIO(data),header=None,sep=' ')  # 読み込み
146
+
147
+ df[3]=df[1]==df[2] # 完全停止時間の列作成
148
+
149
+ df=df.set_index(0) # 計算用に時間をindexに退避
150
+
151
+
152
+
153
+ l.append([d] + df.sum().to_list() + [df.sum().sum()]) # count()の分を3つのデータの足し算で代替
154
+
155
+ l  # 日付、稼働時間、無人稼働時間、完全停止時間、カウント
156
+
157
+
158
+
159
+ ```
160
+
161
+
162
+
163
+ 途中までですがここで投稿しておきます。
164
+
165
+
166
+
167
+ いったんファイルを読み込んだあと、このような変更をすると注釈に書いたリストができます。
168
+
169
+ forで日付の作成からデータフレーム作成、リスト追記をしていって
170
+
171
+ 全部処理を終わった後、最初に書いた`pd.DataFrame.concat`で一括処理が可能です。
172
+
173
+
174
+
175
+ 稼働率は全部一緒になった後のデータフレームでもすぐ出ますので大丈夫です。

1

追加の質問対応

2021/07/11 09:50

投稿

toshikawa
toshikawa

スコア388

test CHANGED
@@ -23,3 +23,65 @@
23
23
 
24
24
 
25
25
  このようにいったん全てのファイルをデータフレームのリストに格納して、`pandas.DataFrame.concat`で一括処理した後所用の集計を実施してみてはどうでしょうか?
26
+
27
+
28
+
29
+ ------
30
+
31
+ ```python
32
+
33
+ data="""index data
34
+
35
+ 0 日付20210701
36
+
37
+ 1 稼働時間96分
38
+
39
+ 2 無人稼働時間0分
40
+
41
+ 3 稼働率100.0%
42
+
43
+ 4 日付20210702
44
+
45
+ 5 稼働時間299分
46
+
47
+ 6 無人稼働時間0分
48
+
49
+ 7 稼働率99.7%
50
+
51
+ 8 日付20210703
52
+
53
+ 9 稼働時間777分
54
+
55
+ 10 無人稼働時間1分
56
+
57
+ 11 稼働率99.7%"""
58
+
59
+ import io
60
+
61
+ import pandas as pd
62
+
63
+
64
+
65
+ df = pd.read_csv(io.StringIO(data),sep=' ')
66
+
67
+ df['index']=df['index']//4
68
+
69
+ df.index=df.index % 4
70
+
71
+ df.pivot(columns='index',values='data').T
72
+
73
+ ```
74
+
75
+
76
+
77
+ いちおうやってみましたが、**お勧めしません**
78
+
79
+
80
+
81
+ 他の方も書いていますが、**まず、csvの中身を提示してください**
82
+
83
+
84
+
85
+ **日付、稼働時間、無人稼働時間、稼働率**のヘッダーの下にデータがあるのが自然な形だと思いますが、
86
+
87
+ データフレームにするまでに色々とやりすぎてデータが変になっています。