Pandas拆分DataFrame单元格拼接值的常用高效方法有哪些?
解决方案
第一种格式转第二种格式(拆分行)
直接使用Pandas原生的str.split() + explode()组合即可完成,全程向量化操作,完全避免Python层的循环,性能远高于遍历写法,数据量越大优势越明显:
import pandas as pd packed = pd.DataFrame([['banana', 'long|yellow'], ['kiwi', 'brown|oval']], columns=['FRUIT', 'ATTRIBUTES']) pack_delim = '|' # 拆分多值列为列表,再把列表展开为多行 unpacked = packed.assign( ATTRIBUTE = packed['ATTRIBUTES'].str.split(pack_delim) ).explode('ATTRIBUTE').drop('ATTRIBUTES', axis=1).reset_index(drop=True)
第二种格式转第一种格式(合并行)
反向操作可以用groupby + 聚合拼接实现:
packed = unpacked.groupby('FRUIT', as_index=False).agg( ATTRIBUTES = ('ATTRIBUTE', '|'.join) )
性能说明
你原来的遍历写法在数据量超过1万行时性能下降会非常明显,而上述原生方法的性能是遍历写法的10~100倍,适配生产环境的大数据量处理需求。如果你的Pandas版本低于0.25(无explode方法),可以改用pd.DataFrame(packed['ATTRIBUTES'].str.split(pack_delim).tolist(), index=packed['FRUIT']).stack().reset_index([0, 'FRUIT'])的兼容写法,性能也远优于遍历。
内容的提问来源于stack exchange,提问作者Mark Miller
相关产品推荐
相关产品推荐

