首页 > 解决方案 > 在 pd.read_csv 中为测试数据引入迭代器和块大小

问题描述

我是python新手。我读了这个Kaggle 内核

在那个内核中,他使用了块大小为 150_000 的训练数据

train = pd.read_csv('../input/train.csv', iterator=True, chunksize=150_000, dtype={'acoustic_data': np.int16, 'time_to_failure': np.float64})

我使用 python 可视化了 X_train(统计特征)和 y_train(给定 time_to_failure)。它给了我很好的可视化

    train = pd.read_csv('../input/train.csv', iterator=True, chunksize=150_000, dtype={'acoustic_data': np.int16, 'time_to_failure': np.float64})

    X_train = pd.DataFrame()
    y_train = pd.Series()
    for df in train:
        ch = gen_features(df['acoustic_data'])
        X_train = X_train.append(ch, ignore_index=True)
        y_train = y_train.append(pd.Series(df['time_to_failure'].values[-1]))

   #Visulization function 
    plotstatfeature(X_train,y_train.to_numpy(dtype ='float32')) 

对于测试数据,使用相同的函数在 X_test(statistical features) 和 y_hat(calculated time_to_failure) 之间绘制相同的可视化

submission = pd.read_csv('../input/sample_submission.csv', index_col='seg_id')
X_test = pd.DataFrame()

# prepare test data
for seg_id in submission.index:
    seg = pd.read_csv('../input/test/' + seg_id + '.csv')
    ch = gen_features(seg['acoustic_data'])
    X_test = X_test.append(ch, ignore_index=True)

X_test = scaler.transform(X_test)    
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
y_hat = model.predict(X_test)
submission['time_to_failure'] = y_hat
submission.to_csv('submission.csv')

#Visulization function 
plotstatfeature(X_test,y_hat.to_numpy(dtype ='float32'))

问题一:

可视化 X_test(statistical features) 和 y_hat(calculated time_to_failure) 是否有意义

问题2(主要问题):

测试数据的可视化不像训练数据那样好。因为训练数据以 150000 的块大小读取,提供清晰的可视化,而测试数据是完整的数据,提供更密集的不清晰可视化。如何将测试数据转换为 150000 的相同块大小以实现与训练数据可视化相同的统一可视化?

为了将测试数据转换为 150000 的相同块大小,我尝试通过在代码中引入迭代器和块大小来修改这一行

第一种情况:

submission = pd.read_csv('../input/sample_submission.csv', index_col='seg_id' , iterator=True, chunksize=150_000)

但它给了我这个错误

回溯(最近一次通话最后):

文件“”,第 1 行,在 runfile('D:/code.py', wdir='D:/')

文件“C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第 827 行,运行文件 execfile(文件名,命名空间)

文件“C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第 110 行,在 execfile exec(compile(f.read(), filename, 'exec'), namespace)

文件“D:/code.py”,第 299 行,在 main()

主测试中的文件“D:/code.py”,第 239 行(X_train,y_train)

文件“D:/code.py”,第 168 行,在 submit.index 中测试 seg_id:

AttributeError:“TextFileReader”对象没有属性“索引”

第二种情况

seg = pd.read_csv('test/' + seg_id + '.csv'  , iterator=True, chunksize=150000)

它给了我这个错误

回溯(最近一次通话最后):

文件“”,第 1 行,在 runfile('D:/code.py', wdir='D:/')

文件“C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第 827 行,运行文件 execfile(文件名,命名空间)

文件“C:\Users\abc\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py”,第 110 行,在 execfile exec(compile(f.read(), filename, 'exec'), namespace)

文件“D:/code.py”,第 299 行,在 main()

主测试中的文件“D:/code.py”,第 239 行(X_train,y_train)

文件“D:/code.py”,第 170 行,在测试 ch = gen_features(seg['acoustic_data'])

TypeError:“TextFileReader”对象不可下标

如何在测试数据中引入块大小?

标签: pythonpython-3.xpandas

解决方案


报错原因:pandas in read_csv()Function,chunksize = None参数后面加了但是现在你指定了,所以返回的文件类型是<class 'pandas.io.parsers.TextFileReader'>

要解决它,请使用此循环和 chunksize = 100 并查看发生了什么,它将打印许多表:

for chunk in seg:
    print(seg)

推荐阅读