2014-03-31 3 views
3

나는 다음과 스켈 톤 구조를 가지고 rra.py 호출 된 스크립트가 있습니다KeyError를 : 0L 패키지 코드를 실행

usn="" 
usnl=[] 
from bs4 import BeautifulSoup 
import re 
import asys 
import glob 
import os 
import sys 
import sys 

def inputIndex(): 
    #some processsing 

def getval(): 
    #some processing 

def parsehtml(): 
    #some processsing 

def ret(): 
    #some processing 

def main(): 
    inputIndex() 
    ret() 
    parsehtml() 
    getval() 
    print "watsuup" 
    asys.Compavg() 
    asys.compSub() 
    print "nearly done" 
    return 0 


if __name__ == '__main__': 
    inputIndex() 
    main() 
    asys.Compavg() 
     asys.compSub() 

을하고 난 다음의 내용이 위의 스크립트 rra.py에서 가져온 다른 스크립트 asys.py 있습니다.

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy import stats 
import statsmodels.api as sm 
from numpy.random import randn 
import matplotlib as mpl 
import seaborn as sns 

sns.set_color_palette("deep", desat=.6) 
mpl.rc("figure", figsize=(8, 4)) 

def Compavg(): 
    data=Total() 
    markMax=[] 
    markAvg=[] 
    N = 5 
    ind = np.arange(N)  
    width = 0.35 
    fig = plt.figure() 
    ax = fig.add_subplot(111)  
    markMax.extend((data["Total"].max(),data["Total.1"].max(),data["Total.2"].max(),data["Total.3"].max(),data["Total.4"].max())) 
    markAvg.extend((data["Total"].mean(),data["Total.1"].mean(),data["Total.2"].mean(),data["Total.3"].mean(),data["Total.4"].mean())) 
    rects1 = ax.bar(ind, markMax, width, color='black') 
    rects2 = ax.bar(ind+width, markAvg, width, color='green') 
    ax.set_xlim(-width,len(ind)+width) 
    ax.set_ylim(0,120) 
    ax.set_ylabel('Marks') 
    ax.set_title('Max, Mean and Your Marks') 
    xTickMarks = ['Subject'+str(i) for i in range(1,6)] 
    ax.set_xticks(ind+width) 
    xtickNames = ax.set_xticklabels(xTickMarks) 
    plt.setp(xtickNames, rotation=10, fontsize=10) 
    ax.legend((rects1[0], rects2[0]), ('Max', 'Mean')) 
    plt.show() 
    print "finished reading 1" 

def compSub(): 
    #max_data = np.r_[data["Total"]].max() 
    #bins = np.linspace(0, max_data, max_data + 1) 
    data=Total() 
     print data['Total'] 
    plt.hist(data['Total'],linewidth=0, alpha=.7) 
    plt.hist(data['Total.1'],linewidth=0,alpha=.7) 
    plt.hist(data['Total.2'],linewidth=0,alpha=.7) 
    plt.hist(data['Total.3'],linewidth=0,alpha=.7) 
    plt.hist(data['Total.4'],linewidth=0,alpha=.7) 
    plt.title("Total marks Histogram") 
    plt.xlabel("Value") 
    plt.ylabel("Frequency") 
    plt.show() 
    print "finished reading 2" 

def Total(): 
    print "going to read" 
    data=pd.read_csv("output11cs.csv") 
    df3=data[['Total','Total.1','Total.2','Total.3','Total.4','Total.5','Total.6','Total.7']] 
    data["Main Total"]=df3.sum(axis=1) 
    data = data.dropna() 
    data.reset_index(drop=True) 
    return data 
    #compSub() 
    #Compavg() 

I는 완벽하게 실행하고 asys.py에서 제시된 그래프와 히스토그램을 나타내는 python rra.py를 사용하여 (심지어 VIRTUALENV 내부) rra.py 외부 VIRTUALENV을 실행할 때. 내가 virtualenvpython setup.py install를 사용하여 패키지를 설치

from ez_setup import use_setuptools 
use_setuptools() 
from setuptools import setup, find_packages 
from setuptools.command.test import test as TestCommand 
import vturra 
import sys 
class PyTest(TestCommand): 
    def finalize_options(self): 
     TestCommand.finalize_options(self) 
     self.test_args = [] 
     self.test_suite = True 

    def run_tests(self): 
     import pytest 
     errcode = pytest.main(self.test_args) 
     sys.exit(errcode) 

setup(name="vturra", 
    version=vturra.__version__, 
    license='Apache Software License', 
    tests_require=['pytest'], 
    install_requires=['matplotlib>=1.2.1', 
         'pandas', 
         'numpy', 
         'scipy', 
         'beautifulsoup', 
         'requests', 
         'patsy', 
         'seaborn==0.2.1', 
         'BeautifulSoup4' 
        ], 
    cmdclass={'test': PyTest}, 
    description="Downloads results from VTU website and analyzes the result", 
    long_description=open('README.md').read(), 
    author="Muhammed Thaha", 
    author_email='[email protected]', 
    download_url='https://github.com/stormvirux/vturra', 
    packages=find_packages(exclude='tests'), 
    package_data={'vturra': ['data/*.xml']}, 
    include_package_data=True, 
    platforms='any', 
    test_suite='vturra.test.test_vturra', 
    classifiers = [ 
     'Programming Language :: Python', 
     'Development Status :: 1 - Beta', 
     'Natural Language :: English', 
     'Environment :: Web Environment', 
     'Intended Audience :: Developers', 
     'License :: OSI Approved :: Apache Software License', 
     'Operating System :: OS Independent', 
     'Topic :: Internet :: WWW/HTTP :: Dynamic Content', 
     ], 
    extras_require={ 
     'testing': ['pytest'], 
    }, 
    entry_points={ 
     "console_scripts": [ 
      "vturra=vturra.rra:main" 
      #"pip%s=pip:main" % sys.version[:1], 
      #"pip%s=pip:main" % sys.version[:3], 
     ], 
    } 
) 

와 모든 설치에 잘 갔다 :

은 그럼 아래와 같습니다를 패키지에 'setup.py'파일을 만들었습니다. 이제 나는 다음과 같은 오류가 vturra 패키지를 실행할 때 :

Traceback (most recent call last): 
    File "asys.py", line 65, in <module> 
    compSub() 
    File "asys.py", line 46, in compSub 
    plt.hist(data['Total'],linewidth=0, alpha=.7) 
    File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 2827, in hist 
    stacked=stacked, **kwargs) 
    File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/matplotlib/axes.py", line 8249, in hist 
    if isinstance(x, np.ndarray) or not iterable(x[0]): 
    File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/pandas/core/series.py", line 491, in __getitem__ 
    result = self.index.get_value(self, key) 
    File "/home/storm/Documents/lol/local/lib/python2.7/site-packages/pandas/core/index.py", line 1032, in get_value 
    return self._engine.get_value(s, k) 
    File "index.pyx", line 97, in pandas.index.IndexEngine.get_value (pandas/index.c:2661) 
    File "index.pyx", line 105, in pandas.index.IndexEngine.get_value (pandas/index.c:2476) 
    File "index.pyx", line 149, in pandas.index.IndexEngine.get_loc (pandas/index.c:3215) 
    File "hashtable.pyx", line 382, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6450) 
    File "hashtable.pyx", line 388, in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6394) 
KeyError: 0L 

을하지만 main()에서 함수 호출 asys.compSub()을 주석 경우가 오류없이 작동합니다. virtualenv 외부 독립형 스크립트로 실행될 때

UPDATE 기능은 완벽하게 작동하지만 virtualenv 안에 당신은 위의 오류가 발생합니다. 나는 그것이 virtualenv의 문제라고 생각합니까?

답변

7

마지막으로 해결했습니다. 최신 버전 pandasmatplotlib 사이의 문제였습니다. 글로벌 시스템 팬더 버전은 0.13.0 인 virtualenv와 비교하여 0.10이었습니다. 그래서 나는 virtualenv에서 0.10.0으로 다운 그레이드했다.

이제 완벽하게 작동합니다.

기본적으로 matplotlib 및 pandas> = 0.13 인 API와 호환되지 않습니다. plt.hist 시리즈는 현재이 문제에 직면하게됩니다.

그래서 하나가 0.13보다 낮은 버전으로 plt.hist(data['Total.1'].values,....)

하거나 다운 그레이드 팬더를

data['Total.1'].hist()를 사용하거나 값을 전달합니다.