Pandas IOError:[Errno 13]权限被拒绝

时间:2017-06-04 23:58:10

标签: python pandas scikit-learn sklearn-pandas

我一直试图在macbook pro上使用python 2.7运行pandas并继续收到以下错误:

文件“/Users/Hofstadter/anaconda/lib/python2.7/site-packages/pandas/io/common.py”,第376行,在_get_handle中     f = open(path_or_buf,mode)

IOError:[Errno 13]权限被拒绝:'datasets / 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)

1 个答案:

答案 0 :(得分:0)

我怀疑您的问题不是来电to_csv(),而是您致电os.makedirs的地方。

调用os.makedirs(data_path, True)将True解释为模式的参数。参见:

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

如果您想对新目录使用默认模式但忽略现有模式,则您的呼叫应为os.makedirs(data_path, exist_ok=True)