我使用 group by 将数据帧分组为不同的日期,然后使用 concat 根据日期将它们分成训练组和测试组
gp = dfs_0.groupby(pd.TimeGrouper('B'))
train = pd.concat([ gp.get_group(group) for i,group in enumerate( gp.groups) if i < len(gp)-1 ])
test = pd.concat([ gp.get_group(group) for i,group in enumerate( gp.groups) if i == len(gp)-1 ])
但是,如果工作日是银行暂停,我没有数据,因此空组会返回错误:
Traceback (most recent call last): File "", line 1, in File "", line 1, in File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\groupby.py", line 640, in get_group raise KeyError(name) KeyError: Timestamp('2014-04-18 00:00:00', freq='B')
有没有办法在连接前过滤掉这些空组
最佳答案
有一些没有日期
的问题,所以得到KeyError
。
我尝试创建自定义函数:
rng = pd.to_datetime(['2014-04-16','2014-04-17','2014-04-22 00:11:00','2014-04-22',
'2014-04-23','2014-04-23 10:00:03','2014-04-23 14:01:08'])
dfs_0 = pd.DataFrame({'col': range(7)}, index=rng)
print (dfs_0)
col
2014-04-16 00:00:00 0
2014-04-17 00:00:00 1
2014-04-22 00:11:00 2
2014-04-22 00:00:00 3
2014-04-23 00:00:00 4
2014-04-23 10:00:03 5
2014-04-23 14:01:08 6
<小时/>
gp = dfs_0.groupby(pd.TimeGrouper('B'))
def get_cust_group(g, key):
try:
return g.get_group(key)
except KeyError:
return pd.DataFrame()
#change to get_cust_group
train = pd.concat([ get_cust_group(gp,group) for i,group in enumerate( gp.groups) if i < len(gp)-1 ])
test = pd.concat([ get_cust_group(gp,group) for i,group in enumerate( gp.groups) if i == len(gp)-1 ])
print (train)
col
2014-04-16 00:00:00 0
2014-04-17 00:00:00 1
2014-04-22 00:00:00 3
2014-04-22 00:11:00 2
print (test)
col
2014-04-23 00:00:00 4
2014-04-23 10:00:03 5
2014-04-23 14:01:08 6
关于python - 在 pandas 中删除基于时间的空组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45627813/