【每日一读】pandas的apply函数介绍及用法详解

Pandas 的 apply() 方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理。Pandas 的很多对象都可以****apply()****使用来调用函数,如 Dataframe、Series、分组对象、各种时间序列等。
语法结构
apply函数是pandas里面所有函数中自由度最高的函数。使用时,通常放入一个lambda函数表达式、或一个函数作为操作运算,官方上给出DataFrame的**apply()**用法:
1 | DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs) |
1 | 参数: |
使用案例-DataFrame使用apply
- 准备一个数据集

该数据集有一千条数据,类型为DataFrame。
我们将neirong字段使用jieba进行分词、获取词性,写入新的字段segmentation

自定义函数处理

1、定义一个功能函数,用来切词。
1 | def tokenize_text(sent): |
2、用apply方法调用tokenze_text函数
1 | %%time |
3、执行结果展示

可以看到segmentation 已经分词完成,词性也对应上了,通过上面这种方案处理1000条数据用了8.41秒。

lambda函数处理

1、用apply方法调用lambda函数
1 | %%time |
2、执行结果展示

可以看到segmentation 已经分词完成,词性也对应上了,通过上面这种方案处理1000条数据用了8.08秒。
Apply Multiprocessing
Apply Multiprocessing
通过上面的使用案例我们已经大概知道apply在日常开发中如何使用了,但上面1000条数据处理时长就8秒左右,那一万条岂不是更多。
在处理大量数据时,如果只是使用单线程的 apply() 函数,速度可能会很慢。这时,可以考虑使用多进程来加速处理。使用多进程可以同时处理多个任务,提高数据处理的效率。

定义多进程apply函数

1 | def apply_parallel(df, func, num_processes): |
在上述示例代码中,apply_parallel() 函数中使用了 Python 内置的 multiprocessing 模块创建了一个进程池,并将每一行数据都传递给一个函数进行处理。在这个函数中,将 DataFrame 的neirong进行分词,然后将结果保存到新的列表中。

调用执行

1 | %%time |

结果展示


可以看到segmentation 已经分词完成,词性也对应上了,通过上面这种方案处理1000条数据用了2.42秒。处理的数据越多,差异越明显。

需要注意的是,使用多进程处理数据时,可能会出现数据不一致的问题,需要进行一定的控制和同步。另外,多进程处理数据也会消耗更多的系统资源,需要根据具体情况进行权衡和优化。
