2017-07-19 66 views
3

我有一個數據框叫做xxx。的xxx一列是終局的,xxx看起來像這樣Python .drop沒有給出我期望的結果

FpPropeTypCode DTE_DATE_DEATH    Area   Final 
0    FP   NaN Ame_MidEast_Lnd   NaN 
1    FP   NaN Southern_Europe W.E.M. Lines 
2    FP   NaN    NaN   NaN 
3    ZP   NaN Ame_MidEast_Lnd   NaN 
4    YY   NaN Ame_MidEast_Lnd   NaN 

我想刪除具有NaN的對決賽中的所有行,所以我所做的就是

xxx= xxx.drop(pd.isnull(data_file_fp4['Final']))

不幸的是我得到了什麼是

FpPropeTypCode DTE_DATE_DEATH    Area       Final 
2    FP   NaN    NaN       NaN 
3    ZP   NaN Ame_MidEast_Lnd       NaN 
4    YY   NaN Ame_MidEast_Lnd       NaN 
5    NN   NaN Ame_MidEast_Lnd NORTH ARM TRANSPORTATION LTD 
6    CP   NaN Northern_Europe      MPC Group 

這顯然是不正確的......

我真正需要做的是根據兩個條件刪除行:最後是NaN和Area是Ame_MidEast_Lnd。所以我不能真正使用dropna

我現在的代碼只是做第一個條件有什麼錯?提前致謝。

回答

4

你使用熊貓嗎?大熊貓有一個功能,讓你放棄基於標準行,在這種情況下,某些列是楠: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html

你正在尋找具體的命令很可能是這樣的:

xxx = xxx.dropna(axis=0, subset=['Final']) 

axis = 0指定要刪除行而不是列 子集指定要刪除「Final」是NaN的地方

編輯:提問者不能使用dropna,因爲他們的過濾器邏輯更復雜。

如果你想要更復雜的邏輯,你可能會更好只是做括號邏輯。我會盡量在一個時刻驗證,但你可以嘗試這樣的事:

xxx = xxx[~xxx['Final'].isnull()] 

如果你想要的邏輯,那就是你有NaN的過濾器和列過濾器兩者的第二部分,你可以這樣做:

xxx = xxx[~(xxx['Final'].isnull() & xxx['Area'].str.contains("Ame_MidEast_Lnd"))] 

我已經驗證了這個工程通過運行下面這條巨蟒文件:

import pandas as pd 
import numpy as np 

xxx = pd.DataFrame([ 
        ['FP', np.nan, 'Ame_MidEast_Lnd', np.nan], 
        ['FP', np.nan, 'Southern_Europe', 'W.E.M. Lines'], 
        ['FP', np.nan, np.nan, np.nan], 
        ['ZP', np.nan, 'Ame_MidEast_Lnd', np.nan], 
        ['YY', np.nan, 'Ame_MidEast_Lnd', np.nan]], 
        columns=['FpPropeTypCode','DTE_DATE_DEATH','Area', 'Final'] 
        ) 

# before 
print xxx 

# whatever rows have both 'Final' as NaN and 'Area' containing Ame_MidEast_Lnd, we do NOT want those rows 
xxx = xxx[~(xxx['Final'].isnull() & xxx['Area'].str.contains("Ame_MidEast_Lnd"))] 

# after 
print xxx 

你會看到解決方案的工作,你所希望的方式。

+0

嗨,非常感謝您的幫助!我真正需要做的是根據兩個條件刪除行:最後是NaN和Area是Ame_MidEast_Lnd。所以我不能真的使用dropna – TingTing

+0

好吧,給我一秒鐘來測試一下。 – itsmichaelwang

+0

@TingTing我相信我有一個解決方案可以處理您的isNull需求和列過濾器。請讓我知道,如果這可以解決您的問題。 – itsmichaelwang

相關問題