2017-06-04 119 views
-1

我一直在试图运行使用Python 2.7在MacBook Pro上熊猫和不断收到以下错误:熊猫IO错误:[错误13]许可被拒绝

文件“/用户/霍夫斯塔特/蟒蛇/ lib中/ python2 0.7 /站点包/大熊猫/ IO/common.py”,线路376,在_get_handle F =开放(path_or_buf,模式)

IO错误:[错误13]权限被拒绝:“数据集/ cats_0.8_0。 6_0.4_0.2/target.csv'

它看起来像是由于某些原因,为下面的文件创建的文件夹(包括target.csv)具有受限制的权限。下面是代码如下所示:

def get_tables(df): 
    categorical_cols = [col for col in df.columns if col.endswith('_cat')] 
    train_table = df[categorical_cols] 
    for col in categorical_cols: 
     train_table = pd.concat(
      [ 
       train_table, pd.get_dummies(
        train_table[col], 
        prefix=col, 
        prefix_sep='_', 
        dummy_na=False).astype(int) 
      ], 
      axis=1, 
      join='inner') 
     train_table.drop(col, axis=1, inplace=True) 

    print('Tables Created :)') 
    return train_table 

没有问题,创建表,但随后试图如下救他们时,我得到一个权限错误。

def save_tables(data_path, 
       df, 
       top_quant, 
       mh_quant, 
       ml_quant, 
       low_quant, 
       train=True): 

    df = categorize_features(df, top_quant, mh_quant, ml_quant, low_quant) 
    X = get_tables(df) 

    os.makedirs(data_path, True) 

    x_path = '{}/tournament_table.csv'.format(data_path) 

    if train: 
     x_path = '{}/train_table.csv'.format(data_path) 
     y = df['target'].to_frame() 
     y.columns = ['target'] 
     y.to_csv('{}/target.csv'.format(data_path), index=False) 
    else: 
     ids = df['id'].to_frame() 
     ids.columns = ['id'] 
     ids.to_csv('{}/ids.csv'.format(data_path), index=False) 

    X.to_csv(x_path, index=False) 
+2

错误的出现是因为你要使用一些文件你没有不是因为'/ Users/Hofstadter/anaconda/lib/python2.7/site-packages/pandas/io/common.py'没有正确的权限。 –

+0

@ juanpa.arrivillaga嗯,好吧,但为什么我不能访问标准熊猫图书馆的一部分?有没有一种方法可以重新安装熊猫,让我拥有正确的许可?如果有帮助,我正在使用Anaconda。 – 114

+0

如果你是'Hofstadter'并且文件属于你,那么你必须使用'u + r'或'a + r',而不是'o + r'来使它可读。但是'mode'的价值是什么? – DyZ

回答

0

我怀疑你的问题是不是呼叫to_csv()但如果您呼叫os.makedirs

调用os.makedirs(data_path, True)正在将“真”解释为模式的参数。请参阅:

makedirs(name [, mode=0o777][, exist_ok=False]) 

如果您想使用新目录的默认模式,但忽略了现有的,您的通话应该是os.makedirs(data_path, exist_ok=True)

+0

谢谢,但如果我作出这样的变化,我得到以下错误: 文件 “get_dataset.py” 62行,在save_tables os.makedirs(data_path,exist_ok = TRUE) 类型错误:makedirs()得到了一个意外关键字参数'exist_ok' – 114

+0

我明白了。你正在使用Python 2.7。 'os.makedirs()'是不同的。 请参阅[文档](https://docs.python.org/2.7/library/os.html#os.makedirs)。把它叫做'os.makedirs(data_path)',但如果这些目录已经存在,你将不得不手动处理异常情况。 'exist_ok'选项仅在Python 3中可用。 – Steve

+0

非常感谢,我应该看看。所以现在令人惊讶的是,该文件没有任何权限问题。不过,我现在得到以下错误(我已经确认该文件夹在运行该程序之前并没有存在,并且之后完成):'File“/Users/Hofstadter/anaconda/lib/python2.7/os。py“,第157行,在makedirs mkdir(name,mode)' 'OSError:[Errno 17]文件存在:'/ Users/Hofstadter/path/cats_0.8_0.6_0.4_0.2'' – 114

相关问题