有效地从几个大型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语句?

您无法避免遍历所有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])

最新更新