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

使用Python以内存高效的方式使用pandas处理数据,python,pandas,memory,Python,Pandas,Memory,我必须读取多个csv文件,并按“事件名称”对它们进行分组。我也可能有一些重复的,所以我需要删除它们路径包含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(

我必须读取多个csv文件,并按
“事件名称”
对它们进行分组。我也可能有一些重复的,所以我需要删除它们<代码>路径包含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])
此代码将告诉我有多少个唯一的
事件\u名称
以及每个
事件\u名称
有多少个条目。它工作得非常好,除了csv文件太大,我有内存问题。有没有办法用更少的内存来做同样的事情


我读过关于使用
dir()
globals()
删除变量的文章,我当然可以使用这些变量,因为一旦我有了
event\u name
,我就不再需要数据框
events
。然而,我仍然有这些记忆问题。我的问题更具体地说是:我能以更节省内存的方式读取csv文件吗?或者我还能做些什么来减少内存使用?我不介意牺牲性能,只要我可以一次读取所有csv文件,而不是逐块读取。

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

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')
参考: