Выберите только целые числа из столбца смешанных типов данных в пандах - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть кадр данных df, как показано ниже.Столбец col2 имеет нулевые значения, пустые значения, целые числа и даже значения с плавающей запятой.Я хочу получить новый фрейм данных new_df из df, где столбец col2 имеет только целочисленные значения.

import pandas as pd
import numpy as np

col1 = ["a", "b", "c", "d", "e", "f", "g", "h"]
col2 = ["25.45", "", "200", np.nan, "N/A", "null", "35", "5,300"]

df = pd.DataFrame({"col1": col1, "col2": col2})

Так выглядит df:

  col1   col2
0    a  25.45
1    b       
2    c    200
3    d    NaN
4    e    N/A
5    f   null
6    g     35
7    h  5,300

Ниже приведен желаемый вывод для new_df, где значения столбца col2 являются только целыми числами:

  col1   col2  
2    c    200
6    g     35

Я пытался использовать функции pd.to_numeric () и даже isdigit (), но они ожидаютсерия в качестве ввода.Есть ли простой способ получить желаемый результат?

1 Ответ

0 голосов
/ 16 декабря 2018

str.isdigit

Отфильтровать цифры и выбрать с помощью логической индексации:

df2 = df[df.col2.astype(str).str.isdigit()]    
print(df2)
  col1 col2
2    c  200
6    g   35

PS, чтобы преобразовать "col2" в целое число, используйте

df2['col2'] = df2['col2'].astype(int)

str.contains

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

df[df.col2.astype(str).str.contains(r'^\d+$')]

  col1 col2
2    c  200
6    g   35

pd.to_numeric

Aтретье решение несколько хакерское, но использует pd.to_numeric.Нам нужен один шаг перед заменой, чтобы отфильтровать поплавки.

v = df.col2.astype(str).str.replace('.', '|', regex=False)
df[pd.to_numeric(v, errors='coerce').notna()]

  col1 col2
2    c  200
6    g   35
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...