<p><a href="http://www.python.org/dev/peps/pep-0008/" rel="noreferrer">PEP 8</a> states:</p>
<blockquote>
<p>Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.</p>
</blockquote>
<p>However if the class/method/function that I am importing is only used in rare cases, surely it is more efficient to do the import when it is needed?</p>
<p>Isn't this:</p>
<pre><code>class SomeClass(object):

    def not_often_called(self)
        from datetime import datetime
        self.datetime = datetime.now()
</code></pre>
<p>more efficient than this?</p>
<pre><code>from datetime import datetime

class SomeClass(object):

    def not_often_called(self)
        self.datetime = datetime.now()
</code></pre>

The first variant is indeed more efficient than the second when the function is called either zero or one times.  With the second and subsequent invocations, however, the "import every call" approach is actually less efficient.  See
this link
for a lazy-loading technique that combines the best of both approaches by doing a "lazy import".
But there are reasons other than efficiency why you might prefer one over the other.  One approach is makes it much more clear to someone reading the code as to the dependencies that this module has.  They also have very different failure characteristics -- the first will fail at load time if there's no "datetime" module while the second won't fail until the method is called.
Added Note:
In IronPython, imports can be quite a bit more expensive than in CPython because the code is basically being compiled as it's being imported.