如何从复杂字符串创建Pandas DataFrame提取时间序列贡献得分
字符串解析为目标Pandas DataFrame实现方案
以下是可直接复用的实现逻辑,仅需根据你的原始字符串格式调整第一步的解析部分即可:
- 第一步:将原始复杂字符串解析为中间记录列表,每条记录需要包含timestamp(时间戳)、series_name(序列名,如series_0)、score(对应得分)三个核心字段
- 第二步:通过Pandas透视功能将序列名转换为列,自动对齐不同时间戳的字段
- 第三步:补全所有要求的目标字段,无数据的位置自动填充空值,最后调整列顺序即可
核心实现代码:
import pandas as pd import numpy as np # -------------------------- 自定义解析部分 按你的字符串格式修改即可 -------------------------- # 示例:已从原始字符串解析得到如下中间记录列表 parsed_records = [ {"timestamp": "2021-01-02T12:06:00Z", "series_name": "series_0", "score": 1.2}, {"timestamp": "2021-01-02T12:06:00Z", "series_name": "series_1", "score": 3.1}, {"timestamp": "2021-01-02T12:06:00Z", "series_name": "series_2", "score": 0.8}, {"timestamp": "2021-01-02T12:06:00Z", "series_name": "series_3", "score": 2.5}, {"timestamp": "2021-01-02T12:59:00Z", "series_name": "series_0", "score": 2.1}, {"timestamp": "2021-01-02T12:59:00Z", "series_name": "series_1", "score": 1.7}, {"timestamp": "2021-01-02T12:59:00Z", "series_name": "series_2", "score": 1.1}, {"timestamp": "2021-01-02T12:59:00Z", "series_name": "series_3", "score": 0.3}, {"timestamp": "2021-01-02T13:15:00Z", "series_name": "series_0", "score": 0.9}, {"timestamp": "2021-01-02T13:15:00Z", "series_name": "series_1", "score": 2.3}, {"timestamp": "2021-01-02T13:15:00Z", "series_name": "series_2", "score": 1.5}, {"timestamp": "2021-01-02T13:15:00Z", "series_name": "series_3", "score": 2.0}, {"timestamp": "2021-01-02T13:15:00Z", "series_name": "series_4", "score": 1.8}, ] # -------------------------- 自定义解析部分结束 -------------------------- # 透视转换 df_raw = pd.DataFrame(parsed_records) df_pivot = df_raw.pivot(index="timestamp", columns="series_name", values="score").reset_index() # 补全所有目标字段、调整列顺序 target_cols = ["timestamp", "series_0", "series_1", "series_2", "series_3", "series_4"] for col in target_cols: if col not in df_pivot.columns: df_pivot[col] = np.nan df_result = df_pivot[target_cols] # 查看结果 print(df_result)
最终输出的DataFrame完全符合要求,你提到的2021-01-02T12:06:00Z、2021-01-02T12:59:00Z两个时间戳的series_4字段会自动保留空值,不需要额外做缺失值映射。
内容的提问来源于stack exchange,提问作者luca canonico
相关产品推荐
相关产品推荐

