为何row.to_frame().T在单进程与多进程处理中表现不同?
问题原因解析
- 首先明确
df.iterrows()的返回值:它迭代产生的是**(行索引, 行数据Series)**的二元组,而非单独的行Series。 - 单进程场景下,你应该是用了类似
for idx, row in df.iterrows():的循环,通过解包元组拿到了单独的row(Series对象),所以能调用to_frame().T。 - 当你把
df.iterrows()直接传给multiprocessing.Pool.map时,map会将迭代器中的每个完整元组直接传入处理函数。此时你的处理函数拿到的是整个(idx, row)元组,而非单独的行Series,元组当然没有to_frame属性,因此报错。
解决方法
- 方法1:将迭代器转换为只包含行Series的序列,比如
[row for idx, row in df.iterrows()],再传给Pool.map。 - 方法2:修改处理函数,让它先对传入的元组解包,比如:
def process_item(item): idx, row = item # 后续处理row.to_frame().T...
内容的提问来源于stack exchange,提问作者MrKingsley
相关产品推荐
相关产品推荐

