[问题] 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