Say I have a column called names
:
names
name1
NaN
name2
NaN
Entries like name1
and name2
are of type str
, and all the NaN entries are of type float
, in case you needed to know.
I want to loop through this column to perform changes on the good entries while entirely leaving alone the NaN entries, as such:
for i in range(len(df["names"])):
if df['names'][i].isnull() == False:
# do stuff
I've tried isnull()
, math.isna()
, but I get errors like AttributeError: 'str' object has no attribute 'isnull'
and TypeError: expected string or bytes-like object
when I try to apply a lambda function instead of using a for loop.
How can I check if each row is not NaN, when all the good entries are strings?
CodePudding user response:
You can use if df['contact'][i] == df['contact'][i]
to identify non-NaN
values. This leverages the cool property that NaN != NaN
.
Though with that said there are other probably vectorized ways to do what you are trying to do.
CodePudding user response:
If you are going to perform changes to the data of non NaN. You can consider this
df.loc[~df['name'].isna()]
This will help you to get the row of data that is not NaN.