📅  最后修改于: 2023-12-03 14:51:03.841000             🧑  作者: Mango
在处理大型数据集时,数据表可能会包含数百万行和数百列,这会导致加载和处理数据变得非常缓慢,甚至会使 Pandas 使您无法处理数据。因此,在处理大型数据集时,有必要进行一些优化,以提高 Pandas 处理大型数据时的性能。
在 Pandas 中,每列的数据类型可以自动推断,但是这不一定总是最佳的数据类型。对于某些数据类型,使用更具体/更小的数据类型,例如整数类型而不是浮点数类型,可以显着减小数据集的大小和内存占用。下面是将数据类型更改为整数和浮点数的示例:
import pandas as pd
# 读取数据集
df = pd.read_csv('data.csv')
# 将浮点数类型更改为整数类型
df['column_name'] = df['column_name'].astype(int)
# 将整数类型更改为更小的整数类型
df['column_name'] = df['column_name'].astype('int8')
在 Pandas 中,可以使用 chunksize
参数将大型数据集分成更小的数据块,然后分批处理每个数据块。这种方法通常称为“分块处理”。
import pandas as pd
# 读取数据集的前 100 行,按块读取每个块的 500 行
df_chunks = pd.read_csv('data.csv', nrows=100, chunksize=500)
for df_chunk in df_chunks:
# 对每个数据块进行操作
...
如果数据集足够大,那么 Pandas 的默认选项可能会使用大量内存来读取和处理数据。可以使用以下选项来减小 Pandas 的内存占用:
low_memory=False
来告诉 Pandas 不要使用最小化内存使用的可变数据类型。usecols
参数来选择需要加载的列。dtype
参数来指定数据类型,以便 Pandas 不必尝试推断它们。float64
而不是 float32
或 float16
。import pandas as pd
# 逐列读取数据集,只选择需要的列,并指定数据类型
df = pd.read_csv('data.csv', usecols=["column_name1", "column_name2"], dtype={"column_name1": int, "column_name2": float})
# 读取数据集,但禁用使用低内存选项
df = pd.read_csv('data.csv', low_memory=False)
# 读取数据集,将浮点数类型更改为 64 位
df['column_name'] = df['column_name'].astype('float64')
将大型数据集存储为 HDF 格式可以使读取和写入速度更快,并且可以提供快速的随机访问数据。HDF5 是一种基于文件的数据存储格式,支持多种类型的数据,并且可以通过 Python 中的 PyTables 库进行读写。可以使用以下代码将 Pandas 数据框保存为 HDF5 文件:
import pandas as pd
# 将 Pandas 数据框保存为 HDF5 文件
df.to_hdf('data.hdf', key='data')
要读取 HDF5 文件,可以使用以下代码:
import pandas as pd
# 从 HDF5 文件中读取数据
df = pd.read_hdf('data.hdf', key='data')
以上就是处理大型数据集的一些技巧和建议,使用这些技巧和建议可以使 Pandas 处理大型数据时的效率大大提高。