1. 程式人生 > >python pandas 資料框 條件選取行列資料

python pandas 資料框 條件選取行列資料

一、選取幾列組成新的dataframe:   df = df[['A列列明', 'S列列明', 'H列列明']] 二、選取某列'STATUS'裡面元素為"ACTIVE"的行,即刪掉列STATUS元素不是ACTIVE的行   df = df[df['STATUS'] == "ACTIVE"]  (單項條件搜尋,類似SELECT ALL WHERE df.STATUS = ACTIVE) 三、選取'BADTHING'列為元素空的行,既badthing這列有內容的行全部去掉,組成一個新的dataframe   df = df[df['BADTHING'].isnull()]  (空值搜尋) 四、選取GOODREASON列元素為列表
['quality', 'cheap']內元素的行   df = df[df['GOODREASON'].isin(['quality', 'cheap'])]  (多項條件搜尋,類似SELECT ALL WHERE df.GOODREASON= quality AND cheap) 五、分組並進行遍歷,運用groupby和for:   groupByNew = df.groupby('CITY', sort=False)   for name, groupData in groupByNew:     # TODO …… ……   如程式碼所示,我們可以對dataframe以某列'CITY'進行分組。我們如何取出某組的資料呢?當然是用   for迴圈。取出來的name即是組名,而groupData同樣是一個dataframe,可以進行更進一步操作。 六、對Series資料進行排序:   series= series.sort_values(ascending=False)  # 進行從大到小排序 進階:關於groupby的一些資訊:   在進行groupby運算後,直接列印會得一個object資訊,新增groups引數後   print df.groupby(by=['CITY']).groups   打印出來會是帶group標籤和原資料行標籤(也就是原來dataframe裡面對應行的index)的組合資訊:   {'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]
  我們可以看到,按照groups來print,得出city為北京的情況下,對應原來的行標籤第25998行、26134行等   即使指定了某列:   print df.groupby(by=['CITY'])['QUANTITY'].groups   依然會得出相同的結果:   {'BEIJING': [25998L, 26134L, 26135L, 26235L, 26340L], 'SHANGHAI': [33370L, 33426L, 33541L], 'CHENGDU': [26153L]   除非我們把每個分組的所有行都整理成一行,如用sum來求和:   print df.groupby(by=['CITY'])['QUANTITY'].sum()   這樣就可以成功轉換成dataframe了:   CITY   BEIJING        5   SHANGHAI  207   CHENGDU   518   …… 彙總說明如下: print '----------NEW------------\n', type(df.groupby(by=['CITY'])) print '----------NEW------------\n', type(df.groupby(by=['CITY']).sum()) print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY']) print '----------NEW------------\n', type(df.groupby(by=['CITY'])['QUANTITY'].sum()) 所得結果為: ----------NEW------------ ----------NEW------------ ----------NEW------------ ----------NEW------------ 說明: 一個dataframe經過groupby以後得到的型別是pandas.core.groupby.DataFrameGroupBy。而用for in迴圈取出的每個項的型別是pandas.core.frame.DataFrame 一個dataframe經過groupby再進行sum以後仍然是dataframe(不過具體通過那一列來sum有待考證) 一個dataframe經過groupby以後再進行列選取,得到的是pandas.core.groupby.SeriesGroupBy型別。可知用for in迴圈取出的是pandas.core.series.Series 一個series經過groupby再進行sum以後仍然是series