Pandas DataFrame:删除满足特定条件的行

时间:2017-07-21 11:57:41

标签: python pandas

我有一个名为df的Pandas DataFrame,其中包含一个名为_text的列。我想删除_text中的值不是字符串的所有行。

最初我这样做:

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

但这只是将它设置为空字符串。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

你很接近,只需要从apply返回布尔掩码,然后使用boolean indexing返回所有string s的值(所以删除所有string s像数字一样) :

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