MST

星途 面试题库

面试题:Python的Pandas处理缺失数据之性能优化与策略设计

对于一个非常大的包含缺失数据的DataFrame(假设数据量达到百万行以上),你如何设计一套高效的缺失数据处理策略,不仅要考虑不同类型数据(数值、字符等)的缺失处理方式,还要兼顾处理过程中的内存使用和运行效率。请详细阐述思路并给出关键Python代码片段。
18.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

1. 总体思路

  • 数据类型分析:首先,要明确不同列的数据类型,因为不同类型的数据缺失处理方式不同。对于数值型数据,可以采用均值、中位数填充等方法;对于字符型数据,可考虑填充众数或特定的占位符。
  • 内存优化:在处理大数据量时,尽量减少数据在内存中的驻留。可以通过分块读取数据、使用合适的数据类型(如 astype 调整)等方式来优化内存使用。
  • 效率提升:采用并行计算的方式处理数据,例如使用 dask 库,它可以在多核心 CPU 上并行处理数据,提升处理速度。同时,避免使用循环,尽量使用 pandas 的向量化操作。

2. 关键Python代码片段

2.1 使用 pandas 进行基础处理

import pandas as pd

# 假设数据存储在一个CSV文件中,分块读取数据
chunk_size = 100000
for chunk in pd.read_csv('large_data.csv', chunksize = chunk_size):
    # 处理数值型数据
    numeric_cols = chunk.select_dtypes(include=['number']).columns
    chunk[numeric_cols] = chunk[numeric_cols].fillna(chunk[numeric_cols].median())

    # 处理字符型数据
    object_cols = chunk.select_dtypes(include=['object']).columns
    chunk[object_cols] = chunk[object_cols].fillna('MISSING')

    # 将处理后的数据写入新文件(这里只是示例,实际应用可根据需求处理)
    chunk.to_csv('processed_data.csv', mode='a', index=False, header = not pd.io.common.file_exists('processed_data.csv'))

2.2 使用 Dask 进行并行处理

import dask.dataframe as dd

# 读取数据
df = dd.read_csv('large_data.csv')

# 处理数值型数据
numeric_cols = df.select_dtypes(include=['number']).columns
df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].median().compute())

# 处理字符型数据
object_cols = df.select_dtypes(include=['object']).columns
df[object_cols] = df[object_cols].fillna('MISSING')

# 计算结果并写入文件
df.to_csv('processed_data.csv', single_file=True, index=False)