Python 获取groupby对象以忽略丢失的数据帧

Python 获取groupby对象以忽略丢失的数据帧,python,python-2.7,pandas,group-by,Python,Python 2.7,Pandas,Group By,我正在使用pandas读取excel文件,并将电子表格转换为数据框。然后我应用groupby,并使用get_group将各个组存储在变量中,以供以后计算。 我的问题是,输入文件的大小并不总是相同的,有时groupby会产生10个df,有时25个df等等。如果初始数据中缺少df,如何让我的程序忽略它 df = pd.read_excel(filepath, 0, skiprows=3, parse_cols='A,B,C,E,F,G', names=['Res

我正在使用pandas读取excel文件,并将电子表格转换为数据框。然后我应用groupby,并使用get_group将各个组存储在变量中,以供以后计算。 我的问题是,输入文件的大小并不总是相同的,有时groupby会产生10个df,有时25个df等等。如果初始数据中缺少df,如何让我的程序忽略它

df = pd.read_excel(filepath, 0, skiprows=3, parse_cols='A,B,C,E,F,G',
                   names=['Result', 'Trial', 'Well', 'Distance', 'Speed', 'Time'])
df = df.replace({'-': 0}, regex=True) #replaces '-' values with 0
df = df['Trial'].unique()
gb = df.groupby('Trial') #groups by column Trial

trial_1 = gb.get_group('Trial     1')
trial_2 = gb.get_group('Trial     2')
trial_3 = gb.get_group('Trial     3')
trial_4 = gb.get_group('Trial     4')
trial_5 = gb.get_group('Trial     5')
假设我的初始数据只有3次试验,我怎么能让它在以后忽略试验4、5?我的代码在所有试验都存在时运行,但在缺少一些试验时失败:(听起来很像是需要if语句,但我疲惫的大脑不知道在哪里


提前感谢!

分组后,您可以使用属性
获取组。groups
这将返回组名的dict,然后您可以动态迭代dict键,这样就不需要硬编码大小:

In [22]:
df = pd.DataFrame({'grp':list('aabbbc'), 'val':np.arange(6)})
df

Out[22]:
  grp  val
0   a    0
1   a    1
2   b    2
3   b    3
4   b    4
5   c    5

In [23]:
gp = df.groupby('grp')
gp.groups

Out[23]:
{'a': Int64Index([0, 1], dtype='int64'),
 'b': Int64Index([2, 3, 4], dtype='int64'),
 'c': Int64Index([5], dtype='int64')}

In [25]:    
for g in gp.groups.keys():
    print(gp.get_group(g))

  grp  val
0   a    0
1   a    1
  grp  val
2   b    2
3   b    3
4   b    4
  grp  val
5   c    5

gb.groups
将返回组名和标签的dict:因此,您可以使用这些来获取组名和级别的dict,但这对我有什么帮助?因为您获得了组的dict,您不需要对代码中的组数进行硬编码。您看到我的答案了吗?您获得了组名和级别的dict,然后您可以使用使用组名并将其传递给
get\u group
,例如,
gb\u dict.keys()
返回组名列表,然后您可以将这些列表传递给
get_group
是的,我是个白痴,只要重新阅读您的答案。现在一切都正常了!您是明星非常感谢您并为愚蠢的Qs道歉!好的,我现在明白您的意思了。感谢您的解释!我最终得到了这个,尽管gb_dict=gb.groups gb_dict['Trial 1']Out[162]:[0L、1L、2L、3L,等等,它似乎已经丢失了原始值和格式-我希望输出仍在数据框中以保留结构!请使用任何其他代码和信息编辑您的问题,不要将其放在注释中