explode()函数:

DataFrame.explode(column, ignore_index=False)

Transform each element of a list-like to a row, replicating index values. 将类列表的每个元素转换为行,复制索引值。

使用这个函数的场景是:近期有一个每时段电价结构化需求,原飞书在线表格里有不同地区不同换电站的电价信息,除一口价外,电价按照时段划分成尖、峰、谷、平,而由于地区、月份的原因,所以表格里的电价数据是很不同的,而且由于表格是不断在维护过程中,可能由于维护人员不同或者其他的原因导致输入时数据很混乱,比如中英文冒号、中英文逗号,有时多了空格,有时少了空格等等。在对数据的格式进行基本处理后,将时段数据如(8:00-12:00)处理成[8,9,10,11]的样式,接着就要在找找资料的过程中遇到了explode函数,完美符合我想处理成的样子的需求,因此写下此篇记录。

Example:

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [[0, 1, 2], [6,7,8], [9,10], [3, 4]],
                   'B': [0.1,0.2,0.3,0.4]})
df
df.explode('A')

注:原表格形式类似下表

station_name station_id tip tip_price peak peak_price valley valley_price flat flat_price
站点A A001 11:00-13:00 0.5 18:00-22:00 0.4 23:00-8:00,22:00-23:00 0.2 8:00-11:00,13:00- 18:00 0.3

先处理成:

station_name station_id tip tip_price peak peak_price valley valley_price flat flat_price
站点A A001 [11,12] 0.5 [18,19,20,21] 0.4 [0,1,2,3,4,5,6,7,22,23] 0.2 [8,9,10,13,14,15,16,17] 0.3

然后使用explode()函数处理成:

station_name station_id hour price price_tag
站点A A001 0 0.2 valley
站点A A001 1 0.2 valley
... ... ... ... ...
站点A A001 10 0.3 flat
... ... ... ... ...
站点A A001 22 0.2 valley
站点A A001 23 0.2 valley