如何以简单的方式删除大熊猫数据框中的特殊行

时间:2017-04-25 12:22:49

标签: python pandas

我在python中有一个pandas的数据框。我想在三个条件中删除该行。首先,第1列到第6列和第10到第15行是行中的“NA”。其次,第1列至第3列以及第7至第12列和第16至第18列是“NA”。第三,第4至9列和第13至第18列是“NA”。我写了代码来修复它,但它没有用。 代码如下:

data = pd.read_csv('data(2).txt',sep = "\t",index_col = 'tracking_id')
num = len(data) + 1
for i in range(num):
    if (data.iloc[i,[0:5,9:14]] == 'NA') | (data.iloc[i,[0:11,15:17]] == 'NA)'\
    | (data.iloc[i,[3:8,12:17]] == 'NA'):
        data = data.drop(data.index[i], axis = 0)
数据位于以下链接:enter link description here

2 个答案:

答案 0 :(得分:2)

您可以使用:

np.random.seed(100)
df = pd.DataFrame(np.random.randint(10, size=(5,18)))

df.iloc[0, np.r_[0:5,9:14]] = np.nan
df.iloc[2, np.r_[0:11,15:17]] = np.nan
df.iloc[3:5, np.r_[3:8,12:17]] = np.nan
print (df)
    0    1    2    3    4    5    6    7    8    9    10   11   12   13   14  \
0  NaN  NaN  NaN  NaN  NaN  0.0  4.0  2.0  5.0  NaN  NaN  NaN  NaN  NaN  8.0   
1  6.0  2.0  4.0  1.0  5.0  3.0  4.0  4.0  3.0  7.0  1.0  1.0  7.0  7.0  0.0   
2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  2.0  5.0  1.0  8.0   
3  2.0  8.0  3.0  NaN  NaN  NaN  NaN  NaN  3.0  4.0  7.0  6.0  NaN  NaN  NaN   
4  7.0  6.0  6.0  NaN  NaN  NaN  NaN  NaN  6.0  6.0  0.0  7.0  NaN  NaN  NaN   

    15   16  17  
0  4.0  0.0   9  
1  2.0  9.0   9  
2  NaN  NaN   4  
3  NaN  NaN   5  
4  NaN  NaN   4  

首先根据isnull检查值是NaN,然后按numpy.r_iloc进行选择,并与all进行比较,以检查所有值是boolean indexing每行1}}然后用True(或)构建主掩码。

{{3}}的最后一次过滤,|的反转条件:

~

答案 1 :(得分:0)

list_of_row_to_be_deleted=[1,2]
df.drop(df.index[[list_of_row_to_be_deleted]])