Я хочу иметь возможность удалять из фрейма данных (orig
) строки, которые соответствуют строкам в производном фрейме данных (filtered
), которые содержат NaN
значения в них.Проблема в том, что у производного фрейма данных есть удаленный столбец, который вызывает удаление каждой строки .Чтобы исправить это, я должен заново вставить удаленный столбец.Есть ли более элегантный способ достижения желаемого результата, чем повторная вставка в filtered
столбца, удаленного из него?
>>> orig = pd.DataFrame([
[1, 1.0, 'one'],
[2, 2.0, 'two'],
[100, 100.0, 'one-hundred']
], columns=['Integers', 'Floats', 'Strings'])
>>> numeric = orig.select_dtypes(include=['int', 'float'])
>>> numeric
Integers Floats
0 1 1.0
1 2 2.0
2 100 100.0
>>> filtered = numeric[np.abs(numeric - numeric.mean())<=(numeric.std())].dropna()
>>> filtered
Integers Floats
0 1.0 1.0
1 2.0 2.0
Следующая строка вернет пустой фрейм данных, поскольку filtered
не имеет столбца Strings
в нем и, таким образом, исключает каждую строку из orig
.
>>> removed_rows = orig[orig.isin(filtered)].dropna()
Я должен повторно вставить нечисловой столбец, удаленный во второй строке, перед запуском строки кода выше:
>>> filtered['Strings'] = orig['Strings']
чтобы наконец получить желаемый результат:
>>> removed_rows
Integers Floats Strings
0 1.0 1.0 one
1 2.0 2.0 two
Если это единственный способ сделать это, то это нормально - но я надеялся на более элегантный способ сделать это.Есть ли?