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

我必须读取多个 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 文件,而不是逐块读取。


森栏
浏览 83回答 1
1回答

饮歌长啸

只需保留每行的哈希值即可减少数据大小。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 countingdata.append(csv_file[["event_name", "hash"]])如果您不能冒哈希冲突的风险(这在天文数字上不太可能发生),只需使用另一个哈希键并检查最终计数结果是否相同。更改哈希键的方法如下。# compute hash using a different hash keycsv_file["hash2"] = pd.util.hash_pandas_object(csv_file, hash_key='stackoverflow')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python