Вы можете сделать это, просто используя функцию дублирования pandas drop
df.drop_duplicates(['A','B'],keep= 'last')
На самом деле ваш пример работает, потому что check.py находится в том же каталоге, что и agent.py, но скажем, check.py находился в предыдущем каталоге, например;
agent/agent.py
checks.py
Тогда вы можете сделать следующее :
path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
if not path in sys.path:
sys.path.insert(1, path)
del path
Обратите внимание на использование __ file __
.
You need to add the path to the currently executing module to the sys.path variable. Since you called it on the command line, the path to the script will always be in sys.argv[0].
import sys
import os
sys.path.append(os.path.split(sys.argv[0])[0])
Now when import searches for the module, it will also look in the folder that hosts the agent.py file.
Есть несколько способов добавить элементы в PYTHONPATH
.
Прочтите http://docs.python.org/library/site.html
Задайте переменную среды PYTHONPATH
перед запуском сценария.
Вы можете сделать это python -m agent
, чтобы запустить agent.py
из вашего PYTHONPATH
.
Создайте файлы .pth
в каталоге lib / site-packages
.
Установите свои модули в lib / site-packages
.
НЕ нужно возиться с sys.path. Цитата из документации Python 2.6 для sys.path:
При инициализации при запуске программы первый элемент этого списка, путь [0] - это каталог, содержащий сценарий, который использовался для вызвать интерпретатор Python. Если каталог сценария не доступен (например, если интерпретатор вызывается интерактивно или если сценарий читается из стандартного ввода), путь [0] - пустая строка, который направляет Python на поиск модулей в первую очередь в текущем каталоге. Обратите внимание, что каталог сценария вставлен перед записями вставлен в результате PYTHONPATH.
=== amod.py ===
def whoami():
return __file__
=== ascript.py ===
import sys
print "sys.argv", sys.argv
print "sys.path", sys.path
import amod
print "amod __file__", amod.whoami()
=== result of running ascript.py from afar ===
C:\somewhere_else>\python26\python \junk\timport\ascript.py
sys.argv ['\\junk\\timport\\ascript.py']
sys.path ['C:\\junk\\timport', 'C:\\WINDOWS\\system32\\python26.zip', SNIP]
amod __file__ C:\junk\timport\amod.py
, и если он будет запущен повторно, последняя строка, конечно, изменится на ... amod.pyc. Кажется, это не новинка, это работает с Python 2.1 и 1.5.2.
Подсказки для вас: попробуйте два простых файла, как у меня. Попробуйте запустить Python с -v и -vv. Покажите нам результаты ваших неудачных тестов, включая полную трассировку и сообщение об ошибке, а также ваши два файла. Сообщите нам, на какой платформе вы работаете и какой версии Python. Проверьте права доступа к файлу check.py. Есть ли Checks.something_else, вызывающий помехи?
Я думаю, вам следует подумать о том, чтобы сделать каталог агента правильным пакетом Python. Затем вы размещаете этот пакет в любом месте пути Python и можете импортировать проверки как
from agent import checks
Если вы знаете полный путь к check.py, используйте этот рецепт ( http://code.activestate.com/recipes/159571/ )
Если вы хотите добавить каталог в системный путь - этот рецепт ( http://code.activestate.com/recipes/52662/ ). В этом случае мне нужно определить каталог приложения (sys.argv [0]) и передать это значение функции AddSysPath. Если вы хотите посмотреть производственный образец, оставьте комментарий в этой теме, и я отправлю его позже.
С уважением.