python - 在 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”对象不可下标
如何在测试数据中引入块大小?
解决方案
报错原因:pandas in read_csv()
Function,chunksize = None
参数后面加了但是现在你指定了,所以返回的文件类型是<class 'pandas.io.parsers.TextFileReader'>
要解决它,请使用此循环和 chunksize = 100 并查看发生了什么,它将打印许多表:
for chunk in seg:
print(seg)
推荐阅读
- elasticsearch - kibana 绘图数据值尊重时间戳而不是聚合数据
- c++ - 将输出直接从 makefile 打印到 .txt 文件
- gradle - Gradle 构建在任务 web:yarn_build 失败
- directory - 将文件从子文件夹移动到父文件夹
- javascript - React 中 svg 中的样式特定路径元素
- styled-components - 样式组件是否会引入构建时 CSS 编译?
- java - 水平存储字符串值而不是垂直存储
- jruby - 优化 JRuby 程序以更快地运行
- java - 为什么 MongoTemplate 在更新特定数组元素时改变了行为?
- c# - .NET mvc 5 中动态操作链接创建的类型安全