2016-02-28 13 views
5

में किसी भी कॉलम में 'प्रश्न चिह्न' मान के साथ ड्रॉप पंक्तियां मैं किसी भी कॉलम में एक प्रश्न चिह्न प्रतीक के बिना सभी पंक्तियां (या बिना सभी पंक्तियां लेना) को हटाना चाहता हूं। मैं तत्वों को फ्लोट प्रकार में बदलना चाहता हूं।पांडा डेटाफ्रेम

इनपुट:

X Y Z 
0 1 ? 
1 2 3 
? ? 4 
4 4 4 
? 2 5 

आउटपुट:

X Y Z 
1 2 3 
4 4 4 

अधिमानतः पांडा dataframe संचालन के प्रयोग से।

+1

'बाहर = df.replace ({ '?': numpy.nan})। dropna() .astype (फ्लोट) ' –

+0

यह नीचे दिए गए उत्तर जैसा ही है लेकिन एक लाइनर के साथ बहुत अच्छा है। धन्यवाद – Anonymous

उत्तर

3

आप पहली बार कॉलम में स्ट्रिंग ? ढूंढने का प्रयास कर सकते हैं, बूलियन मास्क और अंतिम फ़िल्टर पंक्तियां बना सकते हैं - boolean indexing का उपयोग करें। आप float करने के लिए कॉलम परिवर्तित की जरूरत है, astype का उपयोग करें:

print ~((df['X'] == '?') (df['Y'] == '?') | (df['Z'] == '?')) 
0 False 
1  True 
2 False 
3  True 
4 False 
dtype: bool 


df1 = df[~((df['X'] == '?') | (df['Y'] == '?') | (df['Z'] == '?'))].astype(float) 
print df1 
    X Y Z 
1 1 2 3 
3 4 4 4 

print df1.dtypes 
X float64 
Y float64 
Z float64 
dtype: object 

या आप कोशिश कर सकते हैं:

df['X'] = pd.to_numeric(df['X'], errors='coerce') 
df['Y'] = pd.to_numeric(df['Y'], errors='coerce') 
df['Z'] = pd.to_numeric(df['Z'], errors='coerce') 
print df 
    X Y Z 
0 0 1 NaN 
1 1 2 3 
2 NaN NaN 4 
3 4 4 4 
4 NaN 2 5 
print ((df['X'].notnull()) & (df['Y'].notnull()) & (df['Z'].notnull())) 
0 False 
1  True 
2 False 
3  True 
4 False 
dtype: bool 

print df[ ((df['X'].notnull()) & (df['Y'].notnull()) & (df['Z'].notnull())) ].astype(float) 
    X Y Z 
1 1 2 3 
3 4 4 4 
+0

मुझे एक टाइप एरर मिलता है: अमान्य प्रकार की तुलना – Anonymous

+0

'?' के साथ मानों का प्रकार क्या है? इसे जांचें 'प्रिंट प्रकार (df.at [0,' Z ']) '-' – jezrael

+0

यह एक कॉलम के लिए काम करता है। तो यह एक बूलियन इंडेक्सर के लिए पंक्तियों को ठीक से हटा देता है। लेकिन जैसे ही मैं उपयोग करता हूं | (या) यह – Anonymous

संबंधित मुद्दे