Конструкция Python if
/ else
не работает векторизованно с Pandas / NumPy. Здесь вы можете использовать np.where
для операций со столбцами:
# CORRECT
df['cross'] = np.where(df['CO'], 'cross', None)
# INCORRECT
# df['cross'] = df.apply(lambda x: 'cross' if (df['CO'] is True) else None, axis=1)
Если вы заинтересованы в цикле по строкам, это возможно, но неэффективно :
[111 ]Обновление 1:
Как сказано в ответе Michael Burr, Raymond Chen недавно отправил короткую статью об этом. Я рад видеть, что мое предположение не было полностью неправильным.
Обновление 0:
Отказ от ответственности: Этот "ответ" является главным образом предположением. Я отправляю его только потому, что достаточно времени передало, чтобы установить, что не у многих людей есть ответ на то, что похоже на фундаментальный вопрос.
Я думаю, что "решение", если приложение является gui или консолью, принято во время компиляции а не во времени выполнения. Таким образом, если Вы компилируете свое приложение как gui приложение, даже если Вы не отображаете gui, все еще gui приложение, и не имеет консоли. Если Вы примете решение скомпилировать его как консольное приложение затем в минимуме, то у Вас будут консоли, высвечивающиеся прежде, чем переместиться в gui "режим". И я не знаю, возможно ли это в управляемом коде.
Проблема фундаментальна, я думаю, поскольку консольное приложение должно взять на себя "управление" консольного приложения вызова. И это должно сделать так, прежде чем код дочернего приложения работает.
Raymond Chen недавно отправил (спустя месяц после того, как вопрос был отправлен здесь на ТАК), короткая статья об этом:
Как я пишу программу, которая может быть запущена или как консоль или как приложение GUI?
Вы не можете, но можно попытаться фальсифицировать его.
Каждое приложение PE содержит поле в своем заголовке, который указывает, под какой подсистемой оно было разработано для выполнения. Можно сказать
IMAGE_SUBSYSTEM_WINDOWS_GUI
для маркировки себя как приложение Windows GUI, или можно сказатьIMAGE_SUBSYSTEM_WINDOWS_CUI
сказать, что Вы - консольное приложение. Если Вы будете приложением GUI, то программа будет работать без консоли.Подсистема определяет, как ядро готовит среду выполнения к программе. Если программа будет отмечена как работающий в консольной подсистеме, то ядро подключит консоль программы к консоли ее родителя, создавая новую консоль, если родитель не будет иметь консоли. (Это - неполное описание, но детали не относятся к обсуждению.), С другой стороны, если программа будет отмечена столь же под управлением как приложение GUI, то ядро запустит программу без любой консоли вообще.
В той статье он указывает другому Junfeng Zhang, который обсуждает, как несколько программ (Visual Studio и ildasm) реализуют это поведение:
Как подать заявку и как GUI и как Консольное приложение?
В случае VisualStudio существует на самом деле два двоичных файла: devenv.com и devenv.exe. Devenv.com является Консольным приложением. Devenv.exe является приложением для GUI. При вводе devenv, из-за правила зондирования Win32, devenv.com выполняется. Если нет никакого входа, devenv.com запускает devenv.exe и выходит из себя. Если существуют исходные данные, devenv.com обрабатывает их как нормальное Консольное приложение.
В ildasm случае существует только один двоичный файл: ildasm.exe. Это сначала компилируется как приложение GUI. Более поздний editbin.exe используется для маркировки его как консольную подсистему. В его основном методе это определяет, должно ли это быть выполнено как режим GUI или консольный режим. Если потребность работать как режим GUI, это повторно запускает себя как приложение для GUI.
В комментариях к статье Raymond Chen laonianren имеет это для добавления к краткому описанию Junfeng Zhang того, как Visual Studio работает:
devenv.com является приложением тупика консольного режима общего назначения. Когда это работает, это создает три канала для перенаправления stdin консоли, stdout и stderr. Это затем находит свое собственное имя (обычно devenv.com), заменяет ".com" ".exe" и запускает новое приложение (т.е. devenv.exe) использование конца чтения канала stdin и концов записи stdout и каналов stderr как стандартные дескрипторы. Затем это просто сидит и ждет devenv.exe для выхода и данные копий между консолью и каналами.
Таким образом даже при том, что devenv.exe является gui приложением, оно может считать и записать "родительскую" консоль с помощью своих стандартных дескрипторов.
И Вы могли использовать devenv.com сами для myapp.exe путем переименования его на myapp.com. Но Вы не можете в практике, потому что она принадлежит MS.