我有一個熊貓數據框與數字數據。對於每個非二進制列,我想識別大於其第99百分位的值,並創建一個布爾掩碼,稍後我將使用它來刪除具有異常值的行。熊貓DataFrame應用功能加倍大小的DataFrame
我試圖創建使用apply
方法,其中df
是具有大小一個 * b的數值數據的數據幀這個布爾掩碼,如下所述。
def make_mask(s):
if s.unique().shape[0] == 2: # If binary, return all-false mask
return pd.Series(np.zeros(s.shape[0]), dtype=bool)
else: # Otherwise, identify outliers
return s >= np.percentile(s, 99)
s_bool = df.apply(make_mask, axis=1)
不幸的是,s_bool
是與兩倍多列的數據幀輸出(即,大小一個 * (B * 2))。第一個列被命名爲1,2,3等,並且填滿了空值。第二列似乎是預期的掩模。
爲什麼apply
方法將DataFrame的大小加倍?不幸的是,熊貓apply documentation沒有提供有用的線索。
您確實張貼了正確的代碼? 'raw = True'表示該函數傳遞給'ndarray',而'ndarray'對象沒有'unique'方法。我嘗試了'raw = False',它工作正常。 – TheBlackCat
我的不好,不應該指定'raw'參數,以便它隱含地設置爲'False'。當我根本沒有設置這個參數時,就會出現兩倍的列。 –
我試着用隨機DataFrame的新版本,並不能重現問題:'df = pd.DataFrame(np.random.random((50,20)),columns = tuple('abcdefghijklmnopqrstuvwxyz'[:20]) ,index = np.arange(0,5,.1))' – TheBlackCat