加快熊猫中csv文件的此条件行读取的速度?

时间:2020-10-09 17:18:38

标签: python pandas performance csv

我对此post进行了修改,以有条件地从csv文件中读取行:

filename=r'C:\Users\Nutzer\Desktop\Projects\UK_Traffic_Data\test.csv'

df = (pd.read_csv(filename, error_bad_lines=False) [lambda x: x['Accident_Index'].str.startswith('2005')])

此行对于小型测试数据集而言效果很好。但是,我确实要读取一个很大的csv文件,并且读取该文件需要很长时间。实际上,最终达到了NotebookApp.iopub_data_rate_limit。我的问题是:

  1. 有没有办法改善此代码及其性能?
  2. “ Accident_Index”列中的记录已排序。因此,如果到达“ Accident_Index”不等于str.startswith('2005')的值,则可以打破读语句。您对此有何建议?

以下是一些示例数据:

enter image description here

所需的输出应该是包含前六条记录的熊猫数据框。

1 个答案:

答案 0 :(得分:1)

我们最初可以在上述条件下仅读取要过滤的特定列(假设这会大大减少读取开销)。

#reading the mask column
df_indx = (pd.read_csv(filename, error_bad_lines=False,usecols=['Accident_Index'])
           [lambda x: x['Accident_Index'].str.startswith('2005')])

然后我们可以使用此列中的值通过skiprowsnrows属性从文件中读取其余列,因为它们是输入文件中的排序值

df_data= (pd.read_csv(filename,    
         error_bad_lines=False,header=0,skiprows=df_indx.index[0],nrows=df_indx.shape[0]))
df_data.columns=['Accident_index','data']

这将提供我们想要的数据的子集。我们可能不需要单独获取列名。

enter image description here