使用Python以内存高效的方式使用pandas处理数据
我必须读取多个csv文件,并按使用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文件的所有路径,我的代码如下:
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')
参考: