2015-11-27 27 views
11

साथ एक स्तंभ में गैर-संख्यात्मक पंक्तियां निकालने निम्नलिखित की तरह एक dataframe नहीं है, और यह एक अशुद्ध स्तंभ 'आईडी' जो यह संख्यात्मक कॉलमपांडा

id, name 
1, A 
2, B 
3, C 
tt, D 
4, E 
5, F 
de, G 

हो sholud है वहाँ दूर करने के लिए एक संक्षिप्त रास्ता नहीं है पंक्तियां क्योंकि टीटी और डी संख्यात्मक मान नहीं हैं

tt,D 
de,G 

डेटाफ्रेम को साफ करने के लिए?

id, name 
1, A 
2, B 
3, C 
4, E 
5, F 

उत्तर

10

आप तार isnumeric के मानक विधि का उपयोग करें और अपने id स्तंभ में प्रत्येक मान से यह लागू हो सकते हैं:

import pandas as pd 
from io import StringIO 

data = """ 
id,name 
1,A 
2,B 
3,C 
tt,D 
4,E 
5,F 
de,G 
""" 

df = pd.read_csv(StringIO(data)) 

In [55]: df 
Out[55]: 
    id name 
0 1 A 
1 2 B 
2 3 C 
3 tt D 
4 4 E 
5 5 F 
6 de G 

In [56]: df[df.id.apply(lambda x: x.isnumeric())] 
Out[56]: 
    id name 
0 1 A 
1 2 B 
2 3 C 
4 4 E 
5 5 F 

या आप कर सकता है आप सूचकांक के रूप में id उपयोग करना चाहते हैं:

In [61]: df[df.id.apply(lambda x: x.isnumeric())].set_index('id') 
Out[61]: 
    name 
id  
1  A 
2  B 
3  C 
4  E 
5  F 
3

यह देखते हुए कि df अपने dataframe है,

import numpy as np 
df[df['id'].apply(lambda x: isinstance(x, (int, np.int64)))] 

क्या यह isinstance समारोह और चेक करने के लिए id कॉलम में प्रत्येक मूल्य गुजर रहा है, तो यह एक int है करता है। फिर यह एक बुलियन सरणी देता है, और आखिरकार केवल पंक्तियों को लौटाता है जहां True है।

आप भी float मूल्यों के लिए खाते की जरूरत है, एक और विकल्प है:

import numpy as np 
df[df['id'].apply(lambda x: type(x) in [int, np.int64, float, np.float64])] 

ध्यान दें कि किसी भी तरह से inplace तो आप एक नया बना, अपने मूल df को पुन: असाइन करने की जरूरत है या नहीं है, :

df = df[df['id'].apply(lambda x: type(x) in [int, np.int64, float, np.float64])] 
# or 
new_df = df[df['id'].apply(lambda x: type(x) in [int, np.int64, float, np.float64])] 
12

pd.to_numeric

In [1079]: df[pd.to_numeric(df['id'], errors='coerce').notnull()] 
Out[1079]: 
    id name 
0 1  A 
1 2  B 
2 3  C 
4 4  E 
5 5  F 
+0

का उपयोग इस चाल – TonyTony

+0

है आप एक संख्या है और एक नहीं के रूप में स्तंभ बनाए रखने के लिए चाहते हैं ऑब्जेक्ट, आपको अलग से 'pd.to_numeric' को कॉल करने की आवश्यकता हो सकती है। –

+0

कोई 'लागू नहीं': डी! – josh