2014-06-13 12 views
5

मैं सोच रहा था कि मैं उन सभी अनुक्रमणिका को कैसे हटा सकता हूं जिनमें उनके कॉलम के अंदर नकारात्मक मान शामिल हैं। मैं पांडस DataFrames का उपयोग कर रहा हूं।पायथन पांडस: डेटाफ्रेम फ़िल्टर नकारात्मक मान

Documentation Pandas DataFrame

स्वरूप:

MyID - valuecol1 - valuecol2 - valuecol3 -... valuecol30

तो मेरी DataFrame कहा जाता है data

0,123,

मुझे पता है कि 1 स्तंभ के लिए यह करने के लिए:

data2 = data.index[data['valuecol1'] > 0] 
data3 = data.ix[data3] 

तो मैं केवल आईडी जहां valuecol1 > 0, मैं and बयान किसी तरह कैसे कर सकते हैं मिल सकता है?

valuecol1 && valuecol2 && valuecol3 && ... && valuecol30 > 0?

उत्तर

3

आप कर सकते थे स्तंभ नाम

for cols in data.columns.tolist()[1:]: 
    data = data.ix[data[cols] > 0] 
+0

धन्यवाद बहुत बहुत। ऐसा लगता है कि काम करता है। – zer02

5

आप एक पूरे पंक्ति या स्तंभ की जाँच करने के all उपयोग कर सकते हैं भर में पाश यह सच है:

In [11]: df = pd.DataFrame(np.random.randn(10, 3)) 

In [12]: df 
Out[12]: 
      0   1   2 
0 -1.003735 0.792479 0.787538 
1 -2.056750 -1.508980 0.676378 
2 1.355528 0.307063 0.369505 
3 1.201093 0.994041 -1.169323 
4 -0.305359 0.044360 -0.085346 
5 -0.684149 -0.482129 -0.598155 
6 1.795011 1.231198 -0.465683 
7 -0.632216 -0.075575 0.812735 
8 -0.479523 -1.900072 -0.966430 
9 -1.441645 -1.189408 1.338681 

In [13]: (df > 0).all(1) 
Out[13]: 
0 False 
1 False 
2  True 
3 False 
4 False 
5 False 
6 False 
7 False 
8 False 
9 False 
dtype: bool 

In [14]: df[(df > 0).all(1)] 
Out[14]: 
      0   1   2 
2 1.355528 0.307063 0.369505 

आप केवल के एक सबसेट को देखने के लिए चाहते हैं कॉलम, उदाहरण के लिए [0, 1]:

In [15]: df[(df[[0, 1]] > 0).all(1)] 
Out[15]: 
      0   1   2 
2 1.355528 0.307063 0.369505 
3 1.201093 0.994041 -1.169323 
6 1.795011 1.231198 -0.465683 
0

आप स्तंभों की एक बगल समूह के मूल्यों दसवें करने के लिए दूसरे से उदाहरण के लिए, जाँच करना चाहते हैं:

df[(df.ix[:,2:10] > 0).all(1)] 

तुम भी एक सीमा का उपयोग कर सकते

df[(df.ix[:,range(1,10,3)] > 0).all(1)] 

और सूचकांक की अपनी सूची

mylist=[1,2,4,8] 
df[(df.ix[:, mylist] > 0).all(1)] 
2

डेटा-फ्रेम के अंदर उपयोग और बयान के लिए आपको केवल एक & वर्ण का उपयोग करना होगा और प्रत्येक स्थिति को कोष्ठक के साथ अलग करना होगा।

उदाहरण के लिए:

data = data[(data['col1']>0) & (data['valuecol2']>0) & (data['valuecol3']>0)] 
संबंधित मुद्दे