如何从Python列表提取Count.AutoSlam.OAK版本号与周均值并存入Pandas列表?
问题需求
从给定的逗号分隔Python列表中提取所有形如Count.AutoSlam.OAK4.3. [Weekly Avg: 0.56]的条目,重点获取版本标识中的数字(如示例中的3)及周均值(如示例中的0.56),并将两类数据分别存入独立列表,供Pandas使用。
待处理列表
raw_data = ['Label,Min,Avg,Max,Nov 23,11:00,Nov 23,12:00,Nov 23,13:00,Nov 23,14:00,Nov 23,15:00,Nov 23,16:00,Nov 23,17:00,Nov 23,18:00,Nov 23,19:00,Nov 23,20:00,Nov 23,21:00,Nov 23,22:00,Nov 23,23:00,Nov 24,00:00,Nov 24,01:00,Nov 24,02:00,Nov 24,03:00,Nov 24,04:00,Nov 24,05:00,Nov 24,06:00,Nov 24,07:00,Nov 24,08:00,Nov 24,09:00,Nov 24,10:00,Nov 24,11:00,Nov 24,12:00,Nov 24,13:00,Nov 24,14:00,Nov 24,15:00,Nov 24,16:00,Nov 24,17:00,Nov 24,18:00,Nov 24,19:00,Nov 24,20:00,Nov 24,21:00,Nov 24,22:00,Nov 24,23:00,Nov 25,00:00,Nov 25,01:00,Nov 25,02:00,Nov 25,03:00,Nov 25,04:00,Nov 25,05:00,Nov 25,06:00,Nov 25,07:00,Nov 25,08:00,Nov 25,09:00,2 - Count.AutoSlam.OAK4.3. [Weekly Avg: 0.56] 0.0 0.56 2.38 0.0 2.27 0.0 0.0 0.16 0.30 0.25 1.07 1.79 2.38 0.0 0.98 0.0 0.0 0.0 0.0 0.41 0.47 0.60,7 - Count.AutoSlam.OAK4.18 [Weekly Avg: 0.29] 0.0 0.29 2.34 0.0 0.0 0.0 0.0 0.0 0.0 2.34 0.0,5 - Count.AutoSlam.OAK4.13 [Weekly Avg: 0.34] 0.0 0.34 2.08 0.83 0.30 0.32 0.19 0.26 0.47 0.36 0.0 0.22 0.11 0.36 0.65 0.41 0.52 0.85 0.88 1.28 0.0 0.0 1.19 0.0 0.0 0.0 0.0 0.0 2.08 0.0 0.0 0.45 0.79 0.32 0.0 0.0 0.0 0.0 0.0 0.35 0.0 0.15,1 - Count.AutoSlam.OAK4.6. [Weekly Avg: 0.59] 0.0 0.59 1.79 0.0 0.34 0.11 0.38 0.24 0.19 0.15 0.42 0.69 0.56 0.26 1.26 0.71 1.79 1.51 0.82 1.10 1.40 0.57 0.0 0.85 0.34 0.0 0.15 0.29 0.86 0.35 0.39 0.78 1.09 1.35 0.68 0.70 1.02 1.66 1.15 0.31 0.0 0.0 0.0 0.077 0.13,11 - Count.AutoSlam.OAK4.19 [Weekly Avg: 0.23]']
最优解决方案
使用正则表达式匹配目标模式是最高效的方式,因为目标条目的格式固定,正则可以精准提取所需字段。
代码实现
import re import pandas as pd # 原始数据 raw_data = ['Label,Min,Avg,Max,Nov 23,11:00,Nov 23,12:00,Nov 23,13:00,Nov 23,14:00,Nov 23,15:00,Nov 23,16:00,Nov 23,17:00,Nov 23,18:00,Nov 23,19:00,Nov 23,20:00,Nov 23,21:00,Nov 23,22:00,Nov 23,23:00,Nov 24,00:00,Nov 24,01:00,Nov 24,02:00,Nov 24,03:00,Nov 24,04:00,Nov 24,05:00,Nov 24,06:00,Nov 24,07:00,Nov 24,08:00,Nov 24,09:00,Nov 24,10:00,Nov 24,11:00,Nov 24,12:00,Nov 24,13:00,Nov 24,14:00,Nov 24,15:00,Nov 24,16:00,Nov 24,17:00,Nov 24,18:00,Nov 24,19:00,Nov 24,20:00,Nov 24,21:00,Nov 24,22:00,Nov 24,23:00,Nov 25,00:00,Nov 25,01:00,Nov 25,02:00,Nov 25,03:00,Nov 25,04:00,Nov 25,05:00,Nov 25,06:00,Nov 25,07:00,Nov 25,08:00,Nov 25,09:00,2 - Count.AutoSlam.OAK4.3. [Weekly Avg: 0.56] 0.0 0.56 2.38 0.0 2.27 0.0 0.0 0.16 0.30 0.25 1.07 1.79 2.38 0.0 0.98 0.0 0.0 0.0 0.0 0.41 0.47 0.60,7 - Count.AutoSlam.OAK4.18 [Weekly Avg: 0.29] 0.0 0.29 2.34 0.0 0.0 0.0 0.0 0.0 0.0 2.34 0.0,5 - Count.AutoSlam.OAK4.13 [Weekly Avg: 0.34] 0.0 0.34 2.08 0.83 0.30 0.32 0.19 0.26 0.47 0.36 0.0 0.22 0.11 0.36 0.65 0.41 0.52 0.85 0.88 1.28 0.0 0.0 1.19 0.0 0.0 0.0 0.0 0.0 2.08 0.0 0.0 0.45 0.79 0.32 0.0 0.0 0.0 0.0 0.0 0.35 0.0 0.15,1 - Count.AutoSlam.OAK4.6. [Weekly Avg: 0.59] 0.0 0.59 1.79 0.0 0.34 0.11 0.38 0.24 0.19 0.15 0.42 0.69 0.56 0.26 1.26 0.71 1.79 1.51 0.82 1.10 1.40 0.57 0.0 0.85 0.34 0.0 0.15 0.29 0.86 0.35 0.39 0.78 1.09 1.35 0.68 0.70 1.02 1.66 1.15 0.31 0.0 0.0 0.0 0.077 0.13,11 - Count.AutoSlam.OAK4.19 [Weekly Avg: 0.23]'] # 拆分逗号分隔的内容 split_items = raw_data[0].split(',') # 定义正则表达式:匹配目标条目,捕获版本号和周均值 pattern = re.compile(r'Count\.AutoSlam\.OAK4\.(\d+)\.? \[Weekly Avg: (\d+\.\d+)\]') # 初始化存储列表 version_numbers = [] weekly_avgs = [] # 遍历所有拆分后的条目 for item in split_items: match = pattern.search(item) if match: # 提取版本号并转为整数 version = int(match.group(1)) # 提取周均值并转为浮点数 avg = float(match.group(2)) version_numbers.append(version) weekly_avgs.append(avg) # 转为Pandas DataFrame(可选,直接用列表也可以) df = pd.DataFrame({ 'Version': version_numbers, 'Weekly Avg': weekly_avgs }) # 输出结果 print("版本号列表:", version_numbers) print("周均值列表:", weekly_avgs) print("\nPandas DataFrame:") print(df)
代码解释
- 拆分原始数据:先把列表中唯一的字符串按逗号拆分,得到单个条目。
- 正则匹配:
Count\.AutoSlam\.OAK4\.(\d+)\.?:匹配版本号部分,(\d+)捕获版本数字,\.?兼容末尾可能存在的点(比如示例中的3.)。\[Weekly Avg: (\d+\.\d+)\]:匹配周均值部分,(\d+\.\d+)捕获小数形式的均值。
- 数据转换与存储:将捕获到的字符串分别转为整数(版本号)和浮点数(周均值),存入对应列表。
- Pandas兼容:可以直接用两个列表创建DataFrame,方便后续分析。
运行结果
版本号列表: [3, 18, 13, 6, 19] 周均值列表: [0.56, 0.29, 0.34, 0.59, 0.23] Pandas DataFrame: Version Weekly Avg 0 3 0.56 1 18 0.29 2 13 0.34 3 6 0.59 4 19 0.23
内容的提问来源于stack exchange,提问作者DATTO MOTORSPORTS
相关产品推荐
相关产品推荐

