ImportError: nenhum módulo chamado dateutil.parser


Estou recebendo o seguinte erro ao importar pandasem um Pythonprograma

monas-mbp:book mona$ sudo pip install python-dateutil
Requirement already satisfied (use --upgrade to upgrade): python-dateutil in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python
Cleaning up...
monas-mbp:book mona$ python
No module named dateutil.parser
Traceback (most recent call last):
  File "", line 4, in <module>
    import pandas as pd
  File "/Library/Python/2.7/site-packages/pandas/", line 6, in <module>
    from . import hashtable, tslib, lib
  File "tslib.pyx", line 31, in init pandas.tslib (pandas/tslib.c:48782)
ImportError: No module named dateutil.parser

Também aqui está o programa:

import codecs 
from math import sqrt
import numpy as np
import pandas as pd

users = {"Angelica": {"Blues Traveler": 3.5, "Broken Bells": 2.0,
                      "Norah Jones": 4.5, "Phoenix": 5.0,
                      "Slightly Stoopid": 1.5,
                      "The Strokes": 2.5, "Vampire Weekend": 2.0},

         "Bill":{"Blues Traveler": 2.0, "Broken Bells": 3.5,
                 "Deadmau5": 4.0, "Phoenix": 2.0,
                 "Slightly Stoopid": 3.5, "Vampire Weekend": 3.0},

         "Chan": {"Blues Traveler": 5.0, "Broken Bells": 1.0,
                  "Deadmau5": 1.0, "Norah Jones": 3.0, "Phoenix": 5,
                  "Slightly Stoopid": 1.0},

         "Dan": {"Blues Traveler": 3.0, "Broken Bells": 4.0,
                 "Deadmau5": 4.5, "Phoenix": 3.0,
                 "Slightly Stoopid": 4.5, "The Strokes": 4.0,
                 "Vampire Weekend": 2.0},

         "Hailey": {"Broken Bells": 4.0, "Deadmau5": 1.0,
                    "Norah Jones": 4.0, "The Strokes": 4.0,
                    "Vampire Weekend": 1.0},

         "Jordyn":  {"Broken Bells": 4.5, "Deadmau5": 4.0,
                     "Norah Jones": 5.0, "Phoenix": 5.0,
                     "Slightly Stoopid": 4.5, "The Strokes": 4.0,
                     "Vampire Weekend": 4.0},

         "Sam": {"Blues Traveler": 5.0, "Broken Bells": 2.0,
                 "Norah Jones": 3.0, "Phoenix": 5.0,
                 "Slightly Stoopid": 4.0, "The Strokes": 5.0},

         "Veronica": {"Blues Traveler": 3.0, "Norah Jones": 5.0,
                      "Phoenix": 4.0, "Slightly Stoopid": 2.5,
                      "The Strokes": 3.0}

class recommender:

    def __init__(self, data, k=1, metric='pearson', n=5):
        """ initialize recommender
        currently, if data is dictionary the recommender is initialized
        to it.
        For all other data types of data, no initialization occurs
        k is the k value for k nearest neighbor
        metric is which distance formula to use
        n is the maximum number of recommendations to make"""
        self.k = k
        self.n = n
        self.username2id = {}
        self.userid2name = {}
        self.productid2name = {}
        # for some reason I want to save the name of the metric
        self.metric = metric
        if self.metric == 'pearson':
            self.fn = self.pearson
        # if data is dictionary set recommender data to it
        if type(data).__name__ == 'dict':
   = data

    def convertProductID2name(self, id):
        """Given product id number return product name"""
        if id in self.productid2name:
            return self.productid2name[id]
            return id

    def userRatings(self, id, n):
        """Return n top ratings for user with id"""
        print ("Ratings for " + self.userid2name[id])
        ratings =[id]
        ratings = list(ratings.items())
        ratings = [(self.convertProductID2name(k), v)
                   for (k, v) in ratings]
        # finally sort and return
        ratings.sort(key=lambda artistTuple: artistTuple[1],
                     reverse = True)
        ratings = ratings[:n]
        for rating in ratings:
            print("%s\t%i" % (rating[0], rating[1]))

    def loadBookDB(self, path=''):
        """loads the BX book dataset. Path is where the BX files are
        located""" = {}
        i = 0
        # First load book ratings into
        f = + "BX-Book-Ratings.csv", 'r', 'utf8')
        for line in f:
            i += 1
            #separate line into fields
            fields = line.split(';')
            user = fields[0].strip('"')
            book = fields[1].strip('"')
            rating = int(fields[2].strip().strip('"'))
            if user in
                currentRatings =[user]
                currentRatings = {}
            currentRatings[book] = rating
  [user] = currentRatings
        # Now load books into self.productid2name
        # Books contains isbn, title, and author among other fields
        f = + "BX-Books.csv", 'r', 'utf8')
        for line in f:
            i += 1
            #separate line into fields
            fields = line.split(';')
            isbn = fields[0].strip('"')
            title = fields[1].strip('"')
            author = fields[2].strip().strip('"')
            title = title + ' by ' + author
            self.productid2name[isbn] = title
        #  Now load user info into both self.userid2name and
        #  self.username2id
        f = + "BX-Users.csv", 'r', 'utf8')
        for line in f:
            i += 1
            #separate line into fields
            fields = line.split(';')
            userid = fields[0].strip('"')
            location = fields[1].strip('"')
            if len(fields) > 3:
                age = fields[2].strip().strip('"')
                age = 'NULL'
            if age != 'NULL':
                value = location + '  (age: ' + age + ')'
                value = location
            self.userid2name[userid] = value
            self.username2id[location] = userid

    def pearson(self, rating1, rating2):
        sum_xy = 0
        sum_x = 0
        sum_y = 0
        sum_x2 = 0
        sum_y2 = 0
        n = 0
        for key in rating1:
            if key in rating2:
                n += 1
                x = rating1[key]
                y = rating2[key]
                sum_xy += x * y
                sum_x += x
                sum_y += y
                sum_x2 += pow(x, 2)
                sum_y2 += pow(y, 2)
        if n == 0:
            return 0
        # now compute denominator
        denominator = (sqrt(sum_x2 - pow(sum_x, 2) / n)
                       * sqrt(sum_y2 - pow(sum_y, 2) / n))
        if denominator == 0:
            return 0
            return (sum_xy - (sum_x * sum_y) / n) / denominator

    def computeNearestNeighbor(self, username):
        """creates a sorted list of users based on their distance to
        distances = []
        for instance in
            if instance != username:
                distance = self.fn([username],
                distances.append((instance, distance))
        # sort based on distance -- closest first
        distances.sort(key=lambda artistTuple: artistTuple[1],
        return distances

    def recommend(self, user):
       """Give list of recommendations"""
       recommendations = {}
       # first get list of users  ordered by nearness
       nearest = self.computeNearestNeighbor(user)
       # now get the ratings for the user
       userRatings =[user]
       # determine the total distance
       totalDistance = 0.0
       for i in range(self.k):
          totalDistance += nearest[i][1]
       # now iterate through the k nearest neighbors
       # accumulating their ratings
       for i in range(self.k):
          # compute slice of pie 
          weight = nearest[i][1] / totalDistance
          # get the name of the person
          name = nearest[i][0]
          # get the ratings for this person
          neighborRatings =[name]
          # get the name of the person
          # now find bands neighbor rated that user didn't
          for artist in neighborRatings:
             if not artist in userRatings:
                if artist not in recommendations:
                   recommendations[artist] = (neighborRatings[artist]
                                              * weight)
                   recommendations[artist] = (recommendations[artist]
                                              + neighborRatings[artist]
                                              * weight)
       # now make list from dictionary
       recommendations = list(recommendations.items())
       recommendations = [(self.convertProductID2name(k), v)
                          for (k, v) in recommendations]
       # finally sort and return
       recommendations.sort(key=lambda artistTuple: artistTuple[1],
                            reverse = True)
       # Return the first n items
       return recommendations[:self.n]

r = recommender(users)
# The author implementation

ratings = pd.read_csv('/Users/danialt/BX-CSV-Dump/BX-Book-Ratings.csv', sep=";", quotechar="\"", escapechar="\\")
books = pd.read_csv('/Users/danialt/BX-CSV-Dump/BX-Books.csv', sep=";", quotechar="\"", escapechar="\\")
users = pd.read_csv('/Users/danialt/BX-CSV-Dump/BX-Users.csv', sep=";", quotechar="\"", escapechar="\\")

pivot_rating = ratings.pivot(index='User-ID', columns='ISBN', values='Book-Rating')

use --upgrade to upgrade- você tentou isso? Parece que o seu dateutilpode estar desatualizado.
user2357112 suporta Monica

talvez tente forçar a reinstalação sudo pip install python-dateutil --force-reinstall... Também é relevante como você instalou os pandas?
Andy Hayden

@AndyHayden Resolvi o problema na resposta. No entanto, estou lidando com um novo problema descrito na resposta.
Mona Jalal

Quando estiver resolvido e não for útil para outras pessoas, considere excluir a pergunta. Em vez de postar uma nova pergunta na sua "resposta", considere postar uma nova pergunta ... pelo menos se for de interesse geral para outras pessoas também!
QuIT - Anony-Mousse

sudo pip install numpy python-dateutil pytz pyparsing six --force-reinstall --upgradefinalmente fez isso por mim (Eu estava prestes a ficar louco)



No Ubuntu, você pode precisar instalar o gerenciador de pacotes pipprimeiro:

sudo apt-get install python-pip

Em seguida, instale o python-dateutilpacote com:

sudo pip install python-dateutil

Recomenda-se fazer a instalação do pip sem o sudo #
MikeL /

@ MikeL Apenas FYI - Tentei instalar o pip sem o sudo no meu RPI e não funcionou. OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/dateutil'
Capitão Whippet

Se você sempre usou o sudo, seus pacotes são instalados no sistema (/ usr / ...). Essa é uma péssima idéia, mas viável se você for o único usuário do sistema. Caso contrário, eles serão instalados para o seu usuário (/ home / seunome / ...). No entanto, a recomendação de usar virtualenvs em vez de instalar no sistema fica cada vez mais forte. Veja para mais detalhes.


Para o Python 3 acima, use:

sudo apt-get install python3-dateutil

Eu não acho que isso seja preciso. É uma biblioteca de terceiros que agora foi portada para python3, mas a instalação ainda é pip3 install python-dateutilpara usuários do python 3

NÃO use python3-dateutil: é uma versão falsa da coisa real que adiciona código malicioso através de outra biblioteca que não é necessária pelo dateutil. Veja
Steve Jalim


Se você estiver usando um virtualenv , verifique se está executando o pip de dentro do virtualenv .

$ which pip
$ find . -name pip -print
$ ./flask/bin/pip install python-dateutil


Nenhuma das soluções funcionou para mim. Se você estiver usando o PIP, faça:

pip install pycrypto==2.6.1


No Ubuntu 18.04 para Python2:

sudo apt-get install python-dateutil


Eu tenho os mesmos problemas no meu MacOS e é trabalho para mim tentar instalar o python-dateutil

Verifique aqui


Se você estiver usando Pipenv, pode ser necessário adicionar isso ao seu Pipfile:

python-dateutil = "*"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.