首页 > 解决方案 > 从几个大型 Pandas 数据帧中有效地提取一些值

问题描述

我从 .tab/.csv 文件中读取了几个(数十到数百个)DataFrame。DF 相当大(数千行、数百列、数十 MB),但我只需要从每个 DataFrame 中挑选出几个值。

通过遍历文件并从每个文件中提取所需的值,这很简单:

values = []

for file in datalist:
    df = pd.read_csv(file)

    # Identify values by row/column labels as positions may change
    val0 = df.loc['row_index_0', 'column_number_0']
    val1 = df.loc['row_index_1', 'column_number_1']
    val2 = df.loc['row_index_2', 'column_number_2']

    values.append([val0, val1, val2])

但我想知道我是否需要担心有效地做到这一点,如果是这样,如何最好地做到这一点。就像,我是否需要担心一个简单的for循环,比如创建一堆相当大的df对象,然后四处浮动占用内存?

如果这是一个潜在的问题,我能做些什么来确保这些df对象在不再需要时被清除?有没有像使用with语句这样的简单上下文管理器方法?

标签: pythonpandasdataframe

解决方案


您无法避免遍历所有 csv 文件,但您可以通过不将每个文件的全部内容读入数据帧来提高效率。如果您只对前几行(例如 3)行和列感兴趣,那么只需阅读此处演示的内容:

values = []

for file in datalist:
    df = pd.read_csv(file, nrows=3, usecols=[0,1,2])
    val0, val1, val2 = df.iloc[r0, c0], df.iloc[r1, c1], df.iloc[r2, c2]
    values.append([val0, val1, val2])

推荐阅读