You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一DataFrame中添加含新表头的传感器数据分段

保留传感器列组的独立输出方案

你的需求是:当每日请求返回的传感器列集合变化时,避免将所有列合并到同一个DataFrame(出现大量空值),而是按列组分开输出,每组对应独立的表头和数据。

修改后的代码

import datetime
import requests
import json
import pandas as pd
import numpy as np
from datetime import timedelta

start_date = datetime.datetime(2023,1,1,0,0)
end_date = datetime.datetime(2023,1,6,0,0)

# 用列表存储不同列组的数据块
data_blocks = []

current_date = start_date
while current_date < end_date:
    q = 'url'  # 替换为实际请求URL
    r = requests.get(q)
    j = json.loads(r.text)
    
    if 'result' in j:    
        dt_series = pd.to_datetime(np.array(j['result']['data'])[:,0])
        sensors = np.array(j['result']['sensors'])  
        data = np.array(j['result']['data'])[:,1:]

        df_new = pd.DataFrame(data, index=dt_series, columns=sensors)
        
        # 判断是否需要新建数据块
        if not data_blocks:
            # 第一个块直接加入
            data_blocks.append(df_new)
        else:
            last_block = data_blocks[-1]
            # 对比当前列和最后一个块的列是否完全一致
            if not df_new.columns.equals(last_block.columns):
                data_blocks.append(df_new)
            else:
                # 列一致则追加到最后一个块
                data_blocks[-1] = pd.concat([last_block, df_new])
    
    current_date += timedelta(days=1)

# 按要求格式输出每个数据块
for block in data_blocks:
    # 重置索引,把datetime作为列输出
    output_df = block.reset_index().rename(columns={'index': 'datetime'})
    # 打印表头和数据,用分号分隔
    print(';'.join(output_df.columns) + ';')
    for _, row in output_df.iterrows():
        row_str = ';'.join(str(val) if pd.notna(val) else '' for val in row)
        print(row_str + ';')

核心改动说明

  • 用data_blocks列表替代单一的sensor_data,专门存储不同列组的DataFrame:当返回的传感器列集合变化时,自动新增一个数据块;列集合不变时,就把数据追加到当前块
  • 输出阶段逐个处理每个数据块,将索引转为datetime列,再按分号分隔的格式打印表头和每行数据,完全匹配你期望的输出样式

内容的提问来源于stack exchange,提问作者user16511234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:15:30