ImportError: Dateutil.parser नाम का कोई मॉड्यूल नहीं


134

प्रोग्राम pandasमें आयात करते समय मुझे निम्न त्रुटि प्राप्त हो रही हैPython

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 t1.py
No module named dateutil.parser
Traceback (most recent call last):
  File "t1.py", line 4, in <module>
    import pandas as pd
  File "/Library/Python/2.7/site-packages/pandas/__init__.py", 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

यहाँ भी कार्यक्रम है:

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':
            self.data = data

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


    def userRatings(self, id, n):
        """Return n top ratings for user with id"""
        print ("Ratings for " + self.userid2name[id])
        ratings = self.data[id]
        print(len(ratings))
        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"""
        self.data = {}
        i = 0
        #
        # First load book ratings into self.data
        #
        f = codecs.open(path + "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 self.data:
                currentRatings = self.data[user]
            else:
                currentRatings = {}
            currentRatings[book] = rating
            self.data[user] = currentRatings
        f.close()
        #
        # Now load books into self.productid2name
        # Books contains isbn, title, and author among other fields
        #
        f = codecs.open(path + "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
        f.close()
        #
        #  Now load user info into both self.userid2name and
        #  self.username2id
        #
        f = codecs.open(path + "BX-Users.csv", 'r', 'utf8')
        for line in f:
            i += 1
            #print(line)
            #separate line into fields
            fields = line.split(';')
            userid = fields[0].strip('"')
            location = fields[1].strip('"')
            if len(fields) > 3:
                age = fields[2].strip().strip('"')
            else:
                age = 'NULL'
            if age != 'NULL':
                value = location + '  (age: ' + age + ')'
            else:
                value = location
            self.userid2name[userid] = value
            self.username2id[location] = userid
        f.close()
        print(i)


    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
        else:
            return (sum_xy - (sum_x * sum_y) / n) / denominator


    def computeNearestNeighbor(self, username):
        """creates a sorted list of users based on their distance to
        username"""
        distances = []
        for instance in self.data:
            if instance != username:
                distance = self.fn(self.data[username],
                                   self.data[instance])
                distances.append((instance, distance))
        # sort based on distance -- closest first
        distances.sort(key=lambda artistTuple: artistTuple[1],
                       reverse=True)
        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 = self.data[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 = self.data[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)
                else:
                   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
r.loadBookDB('/Users/mona/Downloads/BX-Dump/')

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- क्या आपने कोशिश की? ऐसा लगता है कि आपका dateutilपुराना हो चुका है।
user2357112

2
शायद बल को पुनः स्थापित करने का प्रयास करें sudo pip install python-dateutil --force-reinstall... यह भी प्रासंगिक है कि आपने पांडा कैसे स्थापित किया?
एंडी हेडन

1
@AndyHayden मैंने जवाब में समस्या हल की। हालाँकि मैं उत्तर में वर्णित एक नई समस्या से निपट रहा हूँ।
मोना जलाल

2
जब यह हल हो जाए, और दूसरों के लिए उपयोगी न हो, तो प्रश्न को हटाने पर विचार करें। अपने "उत्तर" में एक नया प्रश्न पोस्ट करने के बजाय, एक नया प्रश्न पोस्ट करने पर विचार करें ... कम से कम यदि यह दूसरों के लिए सामान्य हित है, तो भी!
QUIT - Anony-Mousse

4
sudo pip install numpy python-dateutil pytz pyparsing six --force-reinstall --upgradeअंत में यह मेरे लिए था (मैं पागल होने वाला था)
गैबेलरौक्स

जवाबों:


255

उबंटू पर आपको pipपहले पैकेज मैनेजर स्थापित करने की आवश्यकता हो सकती है :

sudo apt-get install python-pip

इसके बाद python-dateutilपैकेज स्थापित करें :

sudo pip install python-dateutil


2
@ मायकेएल जस्ट एफवाईआई - मैंने अपने आरपीआई पर सूडो के बिना पाइप स्थापित करने की कोशिश की और यह काम नहीं किया। OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/dateutil'
कैप्टन व्हिपेट

1
यदि आपने हमेशा sudo का उपयोग किया है, तो आपके पैकेज सिस्टम (/ usr / ...) में इंस्टॉल हो जाते हैं। यह एक बुरा विचार है, लेकिन यदि आप सिस्टम के एकमात्र उपयोगकर्ता हैं तो यह काम करने योग्य है। यदि नहीं, तो वे आपके उपयोगकर्ता (/ home / yourname / ...) के लिए स्थापित हैं। हालांकि, सिस्टम में इंस्टॉल करने के बजाय वर्चुअन का उपयोग करने की सिफारिश मजबूत होती रहती है। अधिक विवरण के लिए पैकेजिंगहोमथॉन .org/tutorials/installing- packages देखें ।
मयिपाइल



10

ऊपर पायथन 3 के लिए, उपयोग करें:

sudo apt-get install python3-dateutil

1
मुझे नहीं लगता कि यह सही है। यह एक तीसरी पार्टी का काम है जिसे अब python3 में चित्रित किया गया है, लेकिन अभी भी pip3 install python-dateutilpython 3 उपयोगकर्ताओं के लिए स्थापित है
beetree

उपयोग न करें python3-dateutil: यह असली चीज़ का एक नकली संस्करण है जो दुर्भावनापूर्ण कोड में किसी अन्य लाइब्रेरी के माध्यम से जुड़ता है जिसे तारीख़िल की ज़रूरत नहीं है। देखें github.com/dateutil/dateutil/issues/984
स्टीव जलिम

4

यदि आप एक virtualenv का उपयोग कर रहे हैं , तो सुनिश्चित करें कि आप virtualenv के भीतर से पाइप चला रहे हैं ।

$ which pip
/Library/Frameworks/Python.framework/Versions/Current/bin/pip
$ find . -name pip -print
./flask/bin/pip
./flask/lib/python2.7/site-packages/pip
$ ./flask/bin/pip install python-dateutil

4

मेरे लिए कोई भी समाधान काम नहीं आया। यदि आप PIP का उपयोग कर रहे हैं:

pip install pycrypto==2.6.1


3

पायथन 2 के लिए Ubuntu 18.04 में:

sudo apt-get install python-dateutil

1

मेरे पास मेरे MacOS पर समान समस्याएं हैं और मेरे लिए अजगर-डेटूटिल स्थापित करने की कोशिश करना काम है

यहा जांचिये


0

यदि आप उपयोग कर रहे हैं Pipenv, तो आपको इसे अपने साथ जोड़ने की आवश्यकता हो सकती है Pipfile:

[packages]
python-dateutil = "*"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.