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 |