'Deleting rows according to specific value in a row

    Edition             Reviews               Ratings                     BookCategory                           Price          Edition_year
165   Paperback,– Import, 5 Jul 1996  4.5 out of 5 stars    2 customer reviews                           Sports  270.00         1996
166          Hardcover,– 18 Aug 2009  4.5 out of 5 stars    2 customer reviews  Language, Linguistics & Writing   61.00         2009
167          Paperback,– 26 Jul 2018  3.7 out of 5 stars   23 customer reviews        Crime, Thriller & Mystery  184.00         2018
168  Paperback,– Import, 22 Mar 2018  4.2 out of 5 stars   50 customer reviews                          Romance   70.00         2018
169     Paperback,– Abridged, Import  5.0 out of 5 stars    2 customer reviews               Action & Adventure  418.00         port
170          Paperback,– 10 Jan 2018  4.7 out of 5 stars    4 customer reviews                           Sports  395.00         2018
171             Paperback,– Apr 2011  4.0 out of 5 stars  197 customer reviews  Language, Linguistics & Writing  179.00         2011
172          Paperback,– 17 Feb 2009  5.0 out of 5 stars    2 customer reviews                  Comics & Mangas  782.00         2009
173          Paperback,– 22 Aug 2000  3.5 out of 5 stars    4 customer reviews  Language, Linguistics & Writing  475.44         2000
174           Paperback,– 5 Jan 2012  4.0 out of 5 stars   30 customer reviews                           Humour  403.00         2012

Suppose in these dataframe, under Edition_year column, i want to delete rows in which the values of edition year is NOT a numeric value. i.e. there are some values which are strings. I have tried .drop() method but cannot the output required.

This is what i tried:

df = df.drop(df[df['Edition_year'].apply(lambda x: str(x).isalpha())].index, inplace = True)


Solution 1:[1]

You can determinate the Edition_year that are numeric using

numeric_filter = df.Edition_year.astype(str).str.isnumeric()

and then use the filter to select only the desired rows

df = df.loc[numeric_filter]

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Arnau