Я думаю, что здесь лучше использовать пропущенные значения вместо ..
по to_numeric
с errors='coerce'
, поэтому делим работу очень хорошо:
df2 = pd.DataFrame({'Country': [ 'US', 'IT', 'FR'],
'Unit': [ 'USD', 'EUR', 'EUR'],
'Location': [ 'Hawai', 'Torino', 'Paris'],
'2000': [2, '..',6],
'2002': [8,10,12]
})
df2.set_index(['Country','Unit','Location'],inplace=True)
df2.columns=df2.columns.astype(int)
s= df.Value.unstack(fill_value=1)
df2 = df2.apply(lambda x: pd.to_numeric(x, errors='coerce')).mul(s)
print (df2)
2000 2002
Country Unit Location
US USD Hawai 3.528105 3.201258
IT EUR Torino NaN 22.408932
FR EUR Paris 11.205348 -11.727335
Если только не числовые значения ..
другое решение - использовать replace
:
df2 = df2.replace('..', np.nan).mul(s)
После тестирования на большем количестве платформ и подходов я в основном отказался от этой функциональности (по крайней мере, для моих целей). Проблема для меня в том, что я хочу иметь что-то, что работает в 90% + ситуаций, а на самом деле все, что я мог придумать, приближается к 70%. Ирония заключается в том, что на самом деле это так же нестабильно и при использовании обычного метода Windows. Для тех, кто все еще хочет пойти по этому опасному пути, вот что я обнаружил:
Из прямых методов API, описанных выше, наиболее стабильно работал SetupAPI (SetupDiSetClassInstallParams) - самая большая проблема, с которой я столкнулся. это то, что иногда он попадал в состояние, когда требовалась перезагрузка, и никакие изменения не работали, пока это не произошло. Единственное, о чем следует помнить при использовании, это то, что существует два профиля для устройств, поэтому в некоторых случаях вам нужно переключать их оба. DDK содержит исходный код инструмента devcon, который показывает, как именно все делать. В конечном итоге это выглядело так, как будто это был самый близкий к щелчку правой кнопкой мыши, но все же проявлял какое-то странное поведение, которого не было у сетевых подключений. Этот подход, похоже, работал примерно в 70% случаев (как в тестах, так и в тестовых системах).
Из общего подхода к взлому лучшее, что я обнаружил, - это не использовать технику, которую сделал ToggleNIC, а вместо этого использовать материал IShellFolder - это позволяет вам использовать GetCommandString, который не зависит от языка. Проблема в том, что в XP GetCommandString ничего не возвращает (о радость), но оказалось, что идентификаторы меню для 'enable' и ' disable 'были согласованы (16 и 17 соответственно), поэтому, если мне не удавалось выполнить GetCommandString, я просто возвращался к идентификаторам меню. Для переключения просто вызовите InvokeCommand либо со строкой, если она вернула, либо с идентификатором меню, если нет. Проблема заключалась в том, что, как и в случае с обычным способом Windows, иногда он не работает и не дает никаких указаний на то, что происходит или почему он не работает. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».
Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!
с. Для переключения просто вызовите InvokeCommand либо со строкой, если она вернула, либо с идентификатором меню, если нет. Проблема заключалась в том, что, как и в случае с обычным способом Windows, иногда он не работает и не дает никаких указаний на то, что происходит или почему он не работает. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!
с. Для переключения просто вызовите InvokeCommand либо со строкой, если она вернула, либо с идентификатором меню, если нет. Проблема заключалась в том, что, как и в случае с обычным способом Windows, иногда он не работает и не дает никаких указаний на то, что происходит или почему он не работает. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!
при этом он не дает вам никаких указаний на то, что происходит или почему это не удалось. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!
при этом он не дает вам никаких указаний на то, что происходит или почему это не удалось. Этот подход, казалось, также работал примерно в 70% случаев, но было гораздо сложнее определить, если что-то пошло не так, плюс всплывал обычный текст «Включение интерфейса ...».Надеюсь, это поможет кому-то еще - и Если кому-то удастся найти другой способ, который работает в большем количестве ситуаций, я бы хотел его услышать!
Попробуйте " Сетевые интерфейсы оболочки " C ++ - код здесь . Это должно работать под XP и выше.
ToggleNic использует Shell32 через COM. В c используется стандартные библиотеки "SHLOBJ.H", "SHELLAPI.H" и класс IShellDispatch.
после долгих поисков я начал копаться в DEVCON. Поняв, что эти методы должны быть обнаружены, я немного поискал и нашел следующее: http://www.codeproject.com/KB/cs/HardwareHelper.aspx
Это помогло мне решить мою проблему включения и отключения адаптера TAP по крайней мере из OpenVPN.