📜  在 pandas 中读取大型数据框 - Python (1)

📅  最后修改于: 2023-12-03 14:51:03.841000             🧑  作者: Mango

在 pandas 中读取大型数据框 - Python

在处理大型数据集时,数据表可能会包含数百万行和数百列,这会导致加载和处理数据变得非常缓慢,甚至会使 Pandas 使您无法处理数据。因此,在处理大型数据集时,有必要进行一些优化,以提高 Pandas 处理大型数据时的性能。

1. 使用适当的数据类型

在 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')
2. 分块读取数据

在 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:
    # 对每个数据块进行操作
    ...
3. 使用尽可能少的内存

如果数据集足够大,那么 Pandas 的默认选项可能会使用大量内存来读取和处理数据。可以使用以下选项来减小 Pandas 的内存占用:

  • 使用 low_memory=False 来告诉 Pandas 不要使用最小化内存使用的可变数据类型。
  • 使用 usecols 参数来选择需要加载的列。
  • 使用 dtype 参数来指定数据类型,以便 Pandas 不必尝试推断它们。
  • 对于财务数据,使用 float64 而不是 float32float16
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')
4. 使用 HDF 存储

将大型数据集存储为 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 处理大型数据时的效率大大提高。