Подтвердить что ты не робот

Отбрасывать нечисловые столбцы из pandas DataFrame

В моем приложении я загружаю текстовые файлы, которые структурированы следующим образом:

  • Первый не числовой столбец (ID)
  • Число нечисловых столбцов (строк)
  • Число числовых столбцов (float)

Число нечисловых столбцов является переменной. В настоящее время я загружаю данные в DataFrame следующим образом:

source = pandas.read_table(inputfile, index_col=0)

Я хотел бы сбросить все нечисловые столбцы одним махом, не зная их имен или индексов, так как это может быть выполнимо, читая их dtype. Возможно ли это с помощью pandas или мне нужно что-то приготовить самостоятельно?

4b9b3361

Ответ 1

Чтобы избежать использования частного метода, вы также можете использовать select_dtypes, где вы можете включить или исключить нужные типы dtypes.

Настройтесь на этот пост на то же самое.

Или в вашем случае, в частности:
source.select_dtypes(['number']) or source.select_dtypes([np.number]

Ответ 2

Это частный метод, но он выполнит трюк: source._get_numeric_data()

In [2]: import pandas as pd

In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]})

In [4]: source
Out[4]:
     A  B       C
0  foo  1  (1, 2)
1  bar  2  (3, 4)

In [5]: source._get_numeric_data()
Out[5]:
   B
0  1
1  2

Ответ 3

У меня также есть другое возможное решение для удаления столбцов с категориальным значением с 2 строками кода, определения списка со столбцами категориальных значений (1-я строка) и удаления их со второй строкой. DF - наш DataFrame

df перед падением: df before dropping

  to_be_dropped=pd.DataFrame(df.categorical).columns
  df= df.drop(to_be_dropped,axis=1)

df после сброса: df after dropping

Ответ 4

Это удалит каждый столбец, который не содержит чисел float64.

df = pd.read_csv('sample.csv', index_col=0)
non_floats = []
for col in df:
    if df[col].dtypes != "float64":
        non_floats.append(col)
df = df.drop(columns=non_floats)