python - 从几个大型 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])
推荐阅读
- python-3.x - 如何在 python 3 中使用 .replace() 反转字符串?
- c# - 选择列表复选框和文本
- javascript - 如何在firebase数据库上实现js中视频的观看次数?
- mysql - 如何处理关系数据库中的金融交易?
- node.js - res 状态 500。消息:内部服务器错误按名称和价格查找产品
- c - 除一种情况外的功能交换功能
- python - x 轴刻度线未出现在图表中
- python - Python字典中的一个键有多个值
- c# - Xamarin 表单:将 *Shared Resource* 图像绑定到 ListView?
- javascript - JavaScript btoa() 到 Python b64decode().decode("utf-8")