2017-01-16 104 views
0

我使用熊貓來讀取excel文件並將電子表格轉換爲數據框。然後,我應用groupby並使用get_group將各個組存儲在變量中以供以後計算。 我的問題是,輸入文件不總是相同的大小,有時groupby會導致10 dfs,有時25等等。如何讓我的程序忽略df從初始數據中丟失?獲取pandas groupby對象以忽略丟失的數據框

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?我的代碼運行時,所有的試驗都存在,但一些丟失的情況下失敗:(這聽起來非常像,如果將需要的聲明,但我疲倦的大腦已經不知道在哪裏...提前

謝謝!

+0

'GB .groups'將返回組名稱和標籤的字典:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.GroupBy.groups.html所以你可以用這些來獲得團體 – EdChum

+0

對於愚蠢的問題抱歉,但是這對我有幫助嗎? – ElHi

+0

因爲你得到了一個組的字典,你不需要在代碼中硬編碼組的數量 – EdChum

回答

0

分組你可以使用屬性.groups這個返回組名字的字典組之後,你就可以只遍歷字典項動態,所以你不需要硬編碼的大小:

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 
+0

好吧,我明白你的意思了。感謝您的解釋!我結束了這雖然 gb_dict = gb.groups gb_dict [ '試驗1'] 缺貨[162]: [0L, 1L,2L , 3L, 等等,它似乎有丟失了原始值和格式 - 我希望輸出在數據框中,以保持結構! – ElHi

+0

請編輯您的問題與任何額外的代碼和信息,不要把它放在評論 – EdChum