My dataframe looks like this(not exactly, but here is the sample):
WARNSPEAK4 WARNSIGN_DTL 1 1.0 word bla bla bla... 2 nan words do not contain... 3 nan word bla bla.. 4 1.0 word bla bla.. 5 nan no relation bla bla..
and I’m trying to find rows only have ‘word’ but without ‘not’
here is my code:
# WARNSPEAK4 결측치를 WARNSIGN_DTL칼럼에서 찾을 수 있는지 확인해봅시다 df3 = df[['WARNSPEAK4','WARNSIGN_DTL']] # take columns only we need df3[df3['WARNSPEAK4'].isnull() & df3['WARNSIGN_DTL'].str.contains('word:',na=False) & df3['WARNSIGN_DTL'].apply(lambda x: 'not' not in x)]
and I’m getting this error:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [10], in <cell line: 3>() 1 # WARNSPEAK4 결측치를 WARNSIGN_DTL칼럼에서 찾을 수 있는지 확인해봅시다 2 df3 = df[['WARNSPEAK4','WARNSIGN_DTL']] 3 df3[df3['WARNSPEAK4'].isnull() & df3['WARNSIGN_DTL'].str.contains('word',na=False) & ----> 4 df3['WARNSIGN_DTL'].apply(lambda x: 'not' not in x )] File ~miniconda3envspy38libsite-packagespandascoreseries.py:4433, in Series.apply(self, func, convert_dtype, args, **kwargs) 4323 def apply( 4324 self, 4325 func: AggFuncType, (...) 4328 **kwargs, 4329 ) -> DataFrame | Series: 4330 """ 4331 Invoke function on values of Series. 4332 (...) 4431 dtype: float64 4432 """ -> 4433 return SeriesApply(self, func, convert_dtype, args, kwargs).apply() File ~miniconda3envspy38libsite-packagespandascoreapply.py:1088, in SeriesApply.apply(self) 1084 if isinstance(self.f, str): 1085 # if we are a string, try to dispatch 1086 return self.apply_str() -> 1088 return self.apply_standard() File ~miniconda3envspy38libsite-packagespandascoreapply.py:1143, in SeriesApply.apply_standard(self) 1137 values = obj.astype(object)._values 1138 # error: Argument 2 to "map_infer" has incompatible type 1139 # "Union[Callable[..., Any], str, List[Union[Callable[..., Any], str]], 1140 # Dict[Hashable, Union[Union[Callable[..., Any], str], 1141 # List[Union[Callable[..., Any], str]]]]]"; expected 1142 # "Callable[[Any], Any]" -> 1143 mapped = lib.map_infer( 1144 values, 1145 f, # type: ignore[arg-type] 1146 convert=self.convert_dtype, 1147 ) 1149 if len(mapped) and isinstance(mapped[0], ABCSeries): 1150 # GH#43986 Need to do list(mapped) in order to get treated as nested 1151 # See also GH#25959 regarding EA support 1152 return obj._constructor_expanddim(list(mapped), index=obj.index) File ~miniconda3envspy38libsite-packagespandas_libslib.pyx:2870, in pandas._libs.lib.map_infer() Input In [10], in <lambda>(x) 1 # WARNSPEAK4 결측치를 WARNSIGN_DTL칼럼에서 찾을 수 있는지 확인해봅시다 2 df3 = df[['WARNSPEAK4','WARNSIGN_DTL']] 3 df3[df3['WARNSPEAK4'].isnull() & df3['WARNSIGN_DTL'].str.contains('word',na=False) & ----> 4 df3['WARNSIGN_DTL'].apply(lambda x: 'not' not in x )] TypeError: argument of type 'float' is not iterable
I don’t understand why I’m getting this error cause df3[‘WARNSIGN_DTL’] column is string type, not float
Advertisement
Answer
Use parentheses when you use ‘&’ conditions. Change it from :
df3[df3['WARNSPEAK4'].isnull() & df3['WARNSIGN_DTL'].str.contains('word',na=False) & df3['WARNSIGN_DTL'].apply(lambda x: 'not' not in x )]
to this
df3[(df3['WARNSPEAK4'].isnull()) & (df3['WARNSIGN_DTL'].str.contains('word',na=False)) & (df3['WARNSIGN_DTL'].apply(lambda x: 'not' not in x ))]