如何从GPRS路由器 fleet数据中创建指定字段DataFrame并导出CSV?
问题描述
从GPRS路由器集群中提取了一个约200行的DataFrame,已筛选出需要监控的若干特定值,需完成以下两项任务:
- 仅使用这些特定值创建新的DataFrame;
- 将该DataFrame写入CSV文件。
已有代码及数据样本如下:
现有代码
import pandas as pd # 数据提取 url ="someurl.splash.com" status = pd.read_csv(url, sep=':', on_bad_lines='skip', skipinitialspace = True) # 提取特定值 model = status['value'].iloc[2] SN = status['value'].iloc[4] OS = status['value'].iloc[6] CPUtemp = status['value'].iloc[10] TOBmodel = status['value'].iloc[63] firm = status['value'].iloc[64] IMEI = status['value'].iloc[65] ICCID = status['value'].iloc[67] SIMnum = status['value'].iloc[67][6:] SIMappel = status['value'].iloc[69] service = status['value'].iloc[73] band = status['value'].iloc[74] rssi = status['value'].iloc[75] network = status['value'].iloc[81] LAI = status['value'].iloc[82] LAC = status['value'].iloc[83] CID = status['value'].iloc[84] LANIP = status['value'].iloc[112] LANDHCP = status['value'].iloc[115] WANIP = status['value'].iloc[130] dlrate = status['value'].iloc[146] uprate = status['value'].iloc[147]
Pandas读取后的数据样本
label value 0 === SYSTEM INFORMATION === 1 Product name NetModule Router 2 Product type NB800 3 Hardware version V3.2 4 Serial number 00112B02AC71 5 Operating system Linux 4.19.163 6 System software 4.7.0.103 7 UBoot 4.7.0.101 8 SPL 4.7.0.101 9 CPU Rev 2.1 Part 0xB944 Mfgr 0x0017 (1000 MHz) 10 CPU temperature 60.2 degrees Celsius 11 RAM 512 MB 12 Flash storage 4096 MB 13 Temperature 60.2 degrees Celsius 14 System errors none 15 Hydra happy 16 === CONFIGURATION INFORMATION === 17 Config version 1.16 18 Config name user-config 19 Config hash b460665137cdca6cd35a2a0da93c0c5d
解决方案
1. 创建新DataFrame
将已提取的监控值整理成字典,再转换为DataFrame,这种方式简洁易维护:
# 整理监控指标与对应值的字典 monitor_data = { "型号": model, "序列号": SN, "操作系统": OS, "CPU温度": CPUtemp, "TOB型号": TOBmodel, "固件版本": firm, "IMEI": IMEI, "ICCID": ICCID, "SIM卡号": SIMnum, "SIM状态": SIMappel, "服务类型": service, "频段": band, "信号强度(RSSI)": rssi, "网络类型": network, "LAI": LAI, "LAC": LAC, "CID": CID, "LAN IP": LANIP, "LAN DHCP状态": LANDHCP, "WAN IP": WANIP, "下行速率": dlrate, "上行速率": uprate } # 两种DataFrame格式可选: # 方式1:指标为行,值为列(适合查看单设备详细参数) new_df = pd.DataFrame.from_dict(monitor_data, orient='index', columns=['值']) # 方式2:指标为列,一行数据(适合单设备快照,便于后续批量合并数据) # new_df = pd.DataFrame([monitor_data])
2. 写入CSV文件
使用Pandas的to_csv方法,根据DataFrame结构调整参数:
# 对应方式1的写入(保留行索引) new_df.to_csv('路由器监控数据.csv', encoding='utf-8-sig') # 对应方式2的写入(不写入默认索引,避免冗余) # new_df.to_csv('路由器监控数据.csv', encoding='utf-8-sig', index=False)
完整代码示例
import pandas as pd # 数据提取 url ="someurl.splash.com" status = pd.read_csv(url, sep=':', on_bad_lines='skip', skipinitialspace = True) # 提取特定值 model = status['value'].iloc[2] SN = status['value'].iloc[4] OS = status['value'].iloc[6] CPUtemp = status['value'].iloc[10] TOBmodel = status['value'].iloc[63] firm = status['value'].iloc[64] IMEI = status['value'].iloc[65] ICCID = status['value'].iloc[67] SIMnum = status['value'].iloc[67][6:] SIMappel = status['value'].iloc[69] service = status['value'].iloc[73] band = status['value'].iloc[74] rssi = status['value'].iloc[75] network = status['value'].iloc[81] LAI = status['value'].iloc[82] LAC = status['value'].iloc[83] CID = status['value'].iloc[84] LANIP = status['value'].iloc[112] LANDHCP = status['value'].iloc[115] WANIP = status['value'].iloc[130] dlrate = status['value'].iloc[146] uprate = status['value'].iloc[147] # 构建监控数据字典 monitor_data = { "型号": model, "序列号": SN, "操作系统": OS, "CPU温度": CPUtemp, "TOB型号": TOBmodel, "固件版本": firm, "IMEI": IMEI, "ICCID": ICCID, "SIM卡号": SIMnum, "SIM状态": SIMappel, "服务类型": service, "频段": band, "信号强度(RSSI)": rssi, "网络类型": network, "LAI": LAI, "LAC": LAC, "CID": CID, "LAN IP": LANIP, "LAN DHCP状态": LANDHCP, "WAN IP": WANIP, "下行速率": dlrate, "上行速率": uprate } # 创建新DataFrame(选择适合的方式) new_df = pd.DataFrame([monitor_data]) # 写入CSV new_df.to_csv('路由器监控数据.csv', encoding='utf-8-sig', index=False)
内容的提问来源于stack exchange,提问作者BenjiBoy
相关产品推荐
相关产品推荐

