python - 加快 Pandas 中 csv 文件的条件行读取速度?

标签 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

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

最佳答案

我们最初可以只读取我们想要使用上述条件过滤的特定列(假设这会显着减少读取开销)。

#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')])

然后我们可以使用此列中的值来使用 skiprows 从文件中读取剩余的列和 nrows属性,因为它们是输入文件中的排序值

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

关于python - 加快 Pandas 中 csv 文件的条件行读取速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64284584/

相关文章:

c# - 首先在需要两者的 IEnumerable 上排序或删除全部?

python - 如何与 python 建立安全连接?

python - 合并重复的列 Pandas

python - 计算单独列表中 Pandas 列中每个值的出现次数

python - 元组的 Pandas 数据框?

jquery - jQuery 为何这么快?

java - Netbeans 开发 PHP 脚本时速度很慢

python - 在 GAE 中对 webapp.RequestHandler 进行单元测试 - Python

python - 如何在 Windows 上安装 PyCairo(Python 的 Cairo)?

python - 滚动总和(浮点精度)的奇怪或不准确的结果