我必须读取多个 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')
添加回答
举报
0/150
提交
取消