[問題] numpy array 一次選取兩行

作者: s82237823   2019-04-17 02:57:26
hi 各位好
小弟又上了問問題了
繼上次遇到的DataFrame之後 這次是numpy array
我現在寫的方式可以達到想要的結果 但是應該有更漂亮的寫法
所以上來請教大家
下面這四行是pandas 讀進來之後.values() -> 變成np array
['AAA', '2019/03/08', 2, '17:54:43', '上班'],
['AAA', '2019/03/08', 2, '23:02:54', '下班'],
['AAA', '2019/03/13', 2, '17:45:20', '上班'],
['AAA', '2019/03/13', 2, '22:11:00', '下班'】
目標是想要計算AAA上班跟下班打卡時間的差(工時)
code:
for row in PT_record(這是np array 全部的上下班紀錄):
#先讀取上班的日期/時間
if row[-1] =='上班':
check_in = row[-2]
y,m,day_in = row[1].split('/')
day_in = int(day_in)
#然後讀取下班的日期/時間
elif row[-1] == '下班':
check_out = row[-2]
y, m, day_out = row[1].split('/')
day_out = int(day_out)
#確定上下班的日期相同
#然後把上班的時間增加到下班的最後一項
if day_in == day_out:
if row[-1] =='上班':
continue
else:
row = np.append(row,check_in)
newrowlist.append(row)
我本來的想法是 一次讀取兩行(上班+下班)
# 整張表都是上下班的順序 已經把資料整理過
但是因為不知道怎麼用numpy array的loop一次跳兩行
所以只能先用上面的寫法
把上班的打卡時間 加入到下班的後面(最後一項)
所以就會變成下面這樣的結果
['AAA' '2019/03/08' 2 '23:02:54' '下班' '17:54:43']
['AAA' '2019/03/13' 2 '22:11:00' '下班' '17:45:20']
AAA 3/8 的下班時間 上班時間
本來想在最後面增加'上班' 但是 np.append不接受str type..
所以就變成這種奇怪的模式
想請問
1. np.array 有辦法兩行兩行的讀取嗎?
這樣我可以一次讀一天的上班+下班 然後在loop裡面就很好處理了
2. 如果沒有辦法一次讀兩行
我要怎麼做才能增加'上班'這個str 到np array 裡面?
增加完之後要怎麼改變array裡面的順序?
我查過reshape, append 好像都不是我要的
最理想的情況是
['AAA' '2019/03/08' 2 '上班' '17:54:43' '下班' '23:02:54']
但是如果不能新增字串的話
['AAA' '2019/03/08' 2 '17:54:43' '23:02:54' ]
這也是可以 然後我就可以計算上班時間 增加到最後面
請問有什麼辦法嗎?
python新手努力學習中
有找過資料但是都不是我要的功能
謝謝各位
補充一下
else:
row = np.insert(row, 3, check_in)
row = np.insert(row, 4, '上班')
用insert選位置的話可以完成
['AAA' '2019/03/31' 1 '17:00:23' '上班' '23:01:51' '下班']]
原來直接加到指定位置就好了
但是我如果想要調換順序的話(ex: 上下班放在時間前面)
我目前還是沒有找到辦法
所以還是想知道
這個loop有辦法改寫的更漂亮更簡潔嗎
謝謝
作者: GeoMeTric ( )   2019-04-17 16:42:00
轉換維度 PT_record.shape = -1, 2, 5 row 即為兩行

Links booklink

Contact Us: admin [ a t ] ucptt.com