【解決str.contains()問題】ValueError: cannot index with vector containing NA / NaN values

問題描述;
當使用dataframe執行如下操作:

df[df.line.str.contains('G')]

目的是:找出df中line列中包含字符’G’的所有行時,出現如下問題:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-3-10f8503f73f2> in <module>()
---->  df.line.str.contains('G')

D:\Anaconda3\lib\site-packages\pandas\core\frame.py in __getitem__(self, key)
   2983 
   2984         # Do we have a (boolean) 1d indexer?
-> 2985         if com.is_bool_indexer(key):
   2986             return self._getitem_bool_array(key)
   2987 

D:\Anaconda3\lib\site-packages\pandas\core\common.py in is_bool_indexer(key)
    128             if not lib.is_bool_array(key):
    129                 if isna(key).any():
--> 130                     raise ValueError(na_msg)
    131                 return False
    132             return True

ValueError: cannot index with vector containing NA / NaN values

很明顯,意思是說line列中存在NA或者NaN值,因此百度呀,網上有大把教你怎麼刪除line列中包含NA/NaN值的方法。

但是,刪除完line列中包含NA/NaN值的行,仍然解決不了問題!!怎麼辦呢?

解決方法:
很簡單,其實很可能是line列中的元素格式不全是str格式,可能存在int格式等等,
因此只需把line列的格式統一成str格式就搞定了!
操作如下:

df['line'] = df['line'].apply(str) #把line列的格式全改爲str

df[df.line.str.contains('G')] #執行你對應的語句

解決問題!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章