如何将含多列表的GPS卫星文本数据加载至Pandas DataFrame
解决GPS卫星数据展开为Pandas DataFrame的问题
你直接把文件路径字符串传给pd.DataFrame是错误用法,这也是报错ValueError: DataFrame constructor not properly called.的原因——DataFrame构造函数需要数组、字典这类数据结构,不是文件路径。要实现你的需求,需要先读取文件内容,再处理每行的特殊结构(前4个公共字段+多组卫星数据),将其展开为每行对应一条卫星数据的格式。
处理步骤与代码示例
假设你的文件每行格式为:id,time,steer,extclk,prn1msg1pseudoR1carrPh1A1CNR1B1C1prn2msg2pseudoR2carrPh2A2CNR2B2C2(前4个字段用逗号分隔,后续每组卫星的8个属性无分隔符连续拼接),可以按以下方式处理:
import pandas as pd # ********** 请根据你的实际数据调整以下字段长度 ********** # 定义单颗卫星每个属性的字符长度 sat_field_lengths = { 'prn': 3, # 卫星编号长度 'msg': 1, # 消息类型长度 'pseudoR': 10, # 伪距长度 'carrPh': 10, # 载波相位长度 'A': 5, # 字段A长度 'CNR': 3, # 载噪比长度 'B': 5, # 字段B长度 'C': 5 # 字段C长度 } sat_fields = list(sat_field_lengths.keys()) total_sat_length = sum(sat_field_lengths.values()) # 单颗卫星数据的总长度 data_rows = [] file_path = r'D:\projects\test-data.csv' # 逐行读取并处理文件 with open(file_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if not line: continue # 拆分前4个公共字段(maxsplit=4确保只拆分前4个逗号) split_parts = line.split(',', maxsplit=4) if len(split_parts) < 5: continue # 跳过格式异常的行 id_val, time_val, steer_val, extclk_val, sat_data_str = split_parts # 计算当前行包含的卫星数量 num_satellites = len(sat_data_str) // total_sat_length # 拆分每颗卫星的数据块 for idx in range(num_satellites): start_pos = idx * total_sat_length end_pos = start_pos + total_sat_length sat_chunk = sat_data_str[start_pos:end_pos] # 拆分当前卫星的各个属性 sat_attrs = {} current_pos = 0 for field, length in sat_field_lengths.items(): sat_attrs[field] = sat_chunk[current_pos:current_pos+length].strip() current_pos += length # 合并公共字段与卫星属性,添加到数据列表 data_rows.append({ 'id': id_val, 'time': time_val, 'steer': steer_val, 'extclk': extclk_val, **sat_attrs }) # 转换为DataFrame df = pd.DataFrame(data_rows) # 可根据需要转换字段类型,比如把数值字段转为float/int # df[['steer', 'pseudoR', 'carrPh', 'CNR']] = df[['steer', 'pseudoR', 'carrPh', 'CNR']].astype(float) print(df.head())
关键说明
- 字段长度调整:必须根据你的实际数据修改
sat_field_lengths中的长度值,否则会拆分错误。 - 分隔符适配:如果前4个公共字段的分隔符不是逗号,修改
split(',', maxsplit=4)中的分隔符即可。 - 格式异常处理:代码中跳过了空行和格式不完整的行,你可以根据需求添加更详细的错误处理逻辑。
内容的提问来源于stack exchange,提问作者cappo
相关产品推荐
相关产品推荐

