如何有效读取CSV的特定行?

时间:2018-07-16 20:38:22

标签: python pandas keras

我正在使用约5,000,000行的训练集训练Keras神经网络模型。我一次只读取该文件的几行内容,以使用类似于以下内容的代码进行训练:

n_lines = 5000000
skiprows = np.delete(np.arange(1, n_lines), np.arange(first_line, first_line+batch_size))

X = pd.read_csv('training.csv', skiprows=skiprows)

X上执行了一些转换,然后使用model.train_on_batch(X, y)将其传递给模型。

我认为这是目前我训练过程中的瓶颈,所以我想知道是否有更有效的方法来实现这一目标。

我定时检查它的差异(training_data.csv有50,000行):

pd.read_csv('training_data.csv') # 0.86 seconds

n_batches = 1000
for i in range(n_batches):
    skiprows = np.delete(np.arange(1, 50000), np.arange(i*50, (1+i)*50))
    pd.read_csv('training_data.csv', skiprows=skiprows)
# 152.23 seconds to iterate through all 1000 batches

1 个答案:

答案 0 :(得分:1)

我相信我找到了一种可以使用chunksize的{​​{1}}参数的方法。

pd.read_csv

这将在大约3.86秒内读取1,000个大小为50的批次,并允许我使用for batch in pd.read_csv('training_data.csv', chunksize=50): # transform/reshape batch #model.train_on_batch(batch, y) next 方法。我仍然需要找到一种更好的方法来读取train_on_batch数据,但是我想我可能会考虑将yX都存储在单个csv中并使用y