我正在使用pandas来读取excel文件并将电子表格转换为数据帧。然后我应用groupby并使用get_group将各个组存储在变量中以便以后计算。 我的问题是输入文件的大小并不总是相同,有时groupby会产生10个dfs,有时候会产生25个等等。如果初始数据中缺少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语句需要,但我疲惫的大脑不知道在哪里......
提前致谢!
答案 0 :(得分:0)
分组后,您可以使用属性.groups
获取组,这将返回组名称的字典,然后您可以动态迭代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