为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python 以内存高效的方式使用 pandas 处理数据

使用 Python 以内存高效的方式使用 pandas 处理数据

森栏 2023-09-26 14:52:05
我必须读取多个 csv 文件并将它们按"event_name". 我也可能有一些重复项,所以我需要删除它们。paths包含csv文件的所有路径,我的代码如下:data = []for path in paths:    csv_file = pd.read_csv(path)    data.append(csv_file)events = pd.concat(data)events = events.drop_duplicates()event_names = events.groupby('event_name')ev2 = []for name, group in event_names:    a, b = group.shape    ev2.append([name, a])这段代码将告诉我event_name有多少个唯一的 unique ,以及每个event_name. 它工作得很好,除了 csv 文件太大而且我遇到了内存问题。有没有办法使用更少的内存来做同样的事情?我读到了有关使用dir()和globals()删除变量的内容,我当然可以使用它们,因为一旦我有了,我就不再event_names需要 DataFrame 了。events但是,我仍然遇到这些记忆问题。更具体地说,我的问题是:我可以以更节省内存的方式读取 csv 文件吗?或者我可以做些什么来减少内存使用?我不介意牺牲性能,只要我可以一次读取所有 csv 文件,而不是逐块读取。
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

只需保留每行的哈希值即可减少数据大小。


csv_file = pd.read_csv(path)


# compute hash (gives an `uint64` value per row)

csv_file["hash"] = pd.util.hash_pandas_object(csv_file)


# keep only the 2 columns relevant to counting

data.append(csv_file[["event_name", "hash"]])

如果您不能冒哈希冲突的风险(这在天文数字上不太可能发生),只需使用另一个哈希键并检查最终计数结果是否相同。更改哈希键的方法如下。


# compute hash using a different hash key

csv_file["hash2"] = pd.util.hash_pandas_object(csv_file, hash_key='stackoverflow')


查看完整回答
反对 回复 2023-09-26
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信