Отбрасывать нечисловые столбцы из pandas DataFrame
В моем приложении я загружаю текстовые файлы, которые структурированы следующим образом:
- Первый не числовой столбец (ID)
- Число нечисловых столбцов (строк)
- Число числовых столбцов (float)
Число нечисловых столбцов является переменной. В настоящее время я загружаю данные в DataFrame следующим образом:
source = pandas.read_table(inputfile, index_col=0)
Я хотел бы сбросить все нечисловые столбцы одним махом, не зная их имен или индексов, так как это может быть выполнимо, читая их dtype. Возможно ли это с помощью pandas или мне нужно что-то приготовить самостоятельно?
Ответы
Ответ 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)