2017-07-21 107 views
0

我有一個名爲df的熊貓數據框,其中包含一個名爲_text的列。我想刪除_text中的值不是字符串的所有行。大熊貓DataFrame:刪除行滿足一定條件

起初我這樣做:

df['_text'] = df['_text'].apply(lambda t: t if isinstance(t, basestring) else '') 

但是,僅僅將其設置爲空字符串。

如何刪除_text列中的值不是字符串的任何行?

謝謝!

回答

1

你靠近,只需要使用apply返回布爾面膜,然後用boolean indexing什麼回報所有string價值觀(所以刪除所有未string就像數字):

df[df['_text'].apply(lambda t: isinstance(t, basestring))] 

或者:

df[df['_text'].apply(type) == basestring] 

樣品:

df= pd.DataFrame({'_text':[1,4,'ss','']}) 
print (df) 
    _text 
0  1 
1  4 
2 ss 
3  

print (df['_text'].apply(lambda t: isinstance(t, basestring))) 
0 False 
1 False 
2  True 
3  True 
Name: _text, dtype: bool 

#for python 3 it return str, for python 2 basestring 
print (df['_text'].apply(type)) 
0 <class 'int'> 
1 <class 'int'> 
2 <class 'str'> 
3 <class 'str'> 
Name: _text, dtype: object 

df1 = df[df['_text'].apply(lambda t: isinstance(t, basestring))] 
print (df1) 
    _text 
2 ss 
3  

df1 = df[df['_text'].apply(type) == basestring] 
print (df1) 
    _text 
2 ss 
3  
+0

難道不會給我一個樂趣在'_text'列中,而不是刪除行,如果它不是字符串? – bclayman

+0

@bclayman是的......它被稱爲布爾索引。 –

+0

Hmm so'df ['_ text'] = df ['_ text']。apply(lambda t:t if isinstance(t,basestring)else'')'將我的條目轉換爲'''380',但是執行'df [df ['_ text']。apply(lambda t:isinstance(t,basestring))]'似乎沒有刪除任何行:( – bclayman

相關問題