我有一个名为df
的Pandas DataFrame,其中包含一个名为_text
的列。我想删除_text
中的值不是字符串的所有行。
最初我这样做:
df['_text'] = df['_text'].apply(lambda t: t if isinstance(t, basestring) else '')
但这只是将它设置为空字符串。
如何删除_text
列中的值不是字符串的任何行?
谢谢!
答案 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