数据类型优化

将默认的object类型转换为更高效的类型,如category(分类数据)、int32/int64(整数)、float32/float64(浮点数)。例如时间列转换为datetime64:

df['date_column'] = pd.to_datetime(df['date_column'])

分类数据列转换:

df['category_column'] = df['category_column'].astype('category')

避免链式赋值

链式操作如df[df.x > 2]['y'] = 5会创建临时对象。改用loc一次性完成:

df.loc[df.x > 2, 'y'] = 5

使用高效读取方法

读取数据时指定数据类型和仅需的列:

dtypes = {'col1': 'int32', 'col2': 'category'}
usecols = ['col1', 'col2']
df = pd.read_csv('data.csv', dtype=dtypes, usecols=usecols)

批量操作替代循环

用apply或向量化操作替代for循环。例如计算平方:

# 低效
for i in range(len(df)):
    df.iloc[i]['squared'] = df.iloc[i]['value'] ** 2

# 高效
df['squared'] = df['value'] ** 2

使用eval和query

对于复杂表达式,eval能减少中间变量:

df.eval('result = (col1 + col2) / col3', inplace=True)

过滤数据时:

df = df.query('col1 > 100 & col2 < 50')

内存分块处理

大数据集可分块读取处理:

chunksize = 100000
for chunk in pd.read_csv('large.csv', chunksize=chunksize):
    process(chunk)

并行计算加速

利用swifter自动并行化apply操作:

import swifter
df['new_col'] = df['col'].swifter.apply(lambda x: x*2)

索引优化

对常用查询列设置索引:

df.set_index('date_column', inplace=True)

排序索引提升查询速度:

df.sort_index(inplace=True)


 

文件格式选择

保存数据时使用高效格式如parquet或feather:

df.to_parquet('data.parquet')
df.to_feather('data.feather')

适时释放内存

删除不再需要的列或中间结果:

del df['temp_column']

显式调用垃圾回收:

import gc
gc.collect()

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐