如何在 Pandas read_csv 函数中过滤加载的行?

2025-02-27 09:07:00
admin
原创
84
摘要:问题描述:如何使用 pandas 过滤要加载到内存中的 CSV 行?这似乎是应该在 中找到的一个选项read_csv。我遗漏了什么吗?示例:我们有一个带有时间戳列的 CSV,并且我们只想加载时间戳大于给定常量的行。解决方案 1:在将 CSV 文件加载到 pandas 对象之前,没有选项可以过滤行。您可以加载文...

问题描述:

如何使用 pandas 过滤要加载到内存中的 CSV 行?这似乎是应该在 中找到的一个选项read_csv。我遗漏了什么吗?

示例:我们有一个带有时间戳列的 CSV,并且我们只想加载时间戳大于给定常量的行。


解决方案 1:

在将 CSV 文件加载到 pandas 对象之前,没有选项可以过滤行。

您可以加载文件,然后使用进行过滤df[df['field'] > constant],或者如果您有一个非常大的文件并且担心内存耗尽,则使用迭代器并在连接文件块时应用过滤器,例如:

import pandas as pd
iter_csv = pd.read_csv('file.csv', iterator=True, chunksize=1000)
df = pd.concat([chunk[chunk['field'] > constant] for chunk in iter_csv])

您可以chunksize根据可用内存进行调整。请参阅此处了解更多详细信息。

解决方案 2:

我没有找到在上下文中执行此操作的直接方法read_csv。但是,read_csv返回一个 DataFrame,可以通过使用布尔向量选择行来过滤它df[bool_vec]

filtered = df[(df['timestamp'] > targettime)]

这是选择 df 中的所有行(假设 df 是任何 DataFrame,例如调用的结果read_csv,至少包含一个 datetime 列timestamp),其中列中的值timestamp大于 targettime 的值。类似的问题。

解决方案 3:

接受答案的另一种方法是将 read_csv() 应用于通过过滤输入文件获得的 StringIO。

with open(<file>) as f:
    text = "
".join([line for line in f if <condition>])

df = pd.read_csv(StringIO(text))

当过滤条件仅保留一小部分行时,此解决方案通常比接受的答案更快

解决方案 4:

如果过滤范围是连续的(时间(戳)过滤器通常都是连续的),那么最快的解决方案是对行范围进行硬编码。只需skiprows=range(1, start_row)nrows=end_row参数结合即可。然后导入只需几秒钟,而接受的解决方案则需要几分钟。考虑到导入时间的节省,对初始版本进行一些实验的start_row成本并不高。请注意,我们使用 保留了标题行range(1,..)

解决方案 5:

如果您使用的是 Linux,则可以使用 grep。

# to import either on Python2 or Python3
import pandas as pd
from time import time # not needed just for timing
try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO


def zgrep_data(f, string):
    '''grep multiple items f is filepath, string is what you are filtering for'''

    grep = 'grep' # change to zgrep for gzipped files
    print('{} for {} from {}'.format(grep,string,f))
    start_time = time()
    if string == '':
        out = subprocess.check_output([grep, string, f])
        grep_data = StringIO(out)
        data = pd.read_csv(grep_data, sep=',', header=0)

    else:
        # read only the first row to get the columns. May need to change depending on 
        # how the data is stored
        columns = pd.read_csv(f, sep=',', nrows=1, header=None).values.tolist()[0]    

        out = subprocess.check_output([grep, string, f])
        grep_data = StringIO(out)

        data = pd.read_csv(grep_data, sep=',', names=columns, header=None)

    print('{} finished for {} - {} seconds'.format(grep,f,time()-start_time))
    return data

解决方案 6:

假设您有以下数据框

+----+--------+
| Id | Name   |
+----+--------+
|  1 | Sarath |
|  2 | Peter  |
|  3 | James  |
+----+--------+

如果您需要过滤记录,Id = 1则可以使用以下代码。

df = pd.read_csv('Filename.csv', sep = '|')
df = df [(df ["Id"] == 1)]

这将产生以下输出。

+----+--------+
| Id | Name   |
+----+--------+
|  1 | Sarath |
+----+--------+

解决方案 7:

您可以指定nrows参数。

`import pandas as pd
df = pd.read_csv('file.csv', nrows=100)`

该代码在0.20.3版本中运行良好。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2974  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1836  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   47  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   47  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用