Панды: фильтр фрейма данных с типом данных


У меня есть фрейм данных. Это часть

        member_id event_duration             domain           category
0          299819             17  element.yandex.ru               None
1          299819              0        mozilla.org          Программы
2          299819              4          vbmail.ru               None
3          299819              aaa          vbmail.ru               None

Как фильтровать df с типом? Обычно я делаю это с str.contains, может быть, это нормально, чтобы указать любой, как df[df.event_duration.astype(int) == True]?

2   2   2016-12-07 19:17:42

2 ответа:

Если все остальные значения строк допустимы, так как они не являются NaN, то вы можете преобразовать столбец в числовой с помощью to_numeric, это преобразует строки в NaN, затем вы можете отфильтровать их с помощью notnull:

In [47]:
df[pd.to_numeric(df['event_duration'], errors='coerce').notnull()]

Out[47]:
   member_id event_duration             domain   category
0     299819             17  element.yandex.ru       None
1     299819              0        mozilla.org  Программы
2     299819              4          vbmail.ru       None

Это:

df[df.event_duration.astype(int) == True]

Не будет работать, так как строка вызовет исключение ValueError, так как строка не может быть преобразована

Вы также можете использовать регулярное выражение.

df[df["event_duration"].str.contains(r"^\d+$")]