如何使用Pandas将单行列键值对格式数据拆分转换为多列结构化数据
如何使用Pandas将单行列键值对格式数据拆分转换为多列结构化数据
看起来你现在手里的是一堆把所有元数据塞在单个字符串里的行,得把它们拆成规整的多列对吧?我来一步步教你怎么用Pandas搞定这个:
核心思路
每个文件里的目标字符串是Date=xxx; Time=xxx; ...这种键值对格式,我们要把它拆分成Date、Time等单独列,再把所有文件的数据整合到一起。
具体步骤与代码修改
1. 调整循环逻辑,处理单个文件的键值对拆分
原来的代码只是把原始文件内容塞进列表,现在我们要在循环里对每个文件的目标字符串做拆分处理:
processed_dfs = [] # 你指定的要保留的列 column_subset=['Date', 'Time', 'TracePoints', 'TSamp', 'TimeUnits', 'AmpToVolts', 'TraceMaxVolts', 'PTime', 'STime'] for f in csv_files: # 只读取第一行(因为后面的行你都要丢弃,这样更省内存) rf = pd.read_csv(f, nrows=1) # 提取那一行的键值对字符串(假设它在第一列) data_str = rf.iloc[0, 0] # 拆分字符串为键值对字典 kv_pairs = data_str.split('; ') # 按分号加空格分割每个键值对 data_dict = {} for pair in kv_pairs: # 用split('=', 1)避免值里出现等号的情况(更健壮) key, value = pair.split('=', 1) data_dict[key] = value # 把字典转成DataFrame,只保留你需要的列 structured_df = pd.DataFrame([data_dict])[column_subset] processed_dfs.append(structured_df) # 打印你需要的信息 print('File Name:', f.split("\\")[-1]) print('Processed Content:') display(structured_df) print()
2. 合并所有文件的处理结果
循环结束后,把所有处理好的小DataFrame合并成一个大的结构化DataFrame:
final_df = pd.concat(processed_dfs, ignore_index=True) print('Final Combined Structured Data:') display(final_df)
关键细节说明
- 使用
nrows=1读取文件:因为你原本要丢弃后面的16385行,直接只读第一行能大幅节省内存和读取时间。 split('=', 1)的作用:如果某个字段的值里意外包含了等号(比如Note=abc=123),这个写法只会拆分第一个等号,避免把值拆坏。- 列子集筛选:通过
[column_subset]确保最终结果只保留你需要的列,顺序也和你指定的一致。
这样处理后,你就能得到像示例里那样的规整表格:
| Date | Time | ... |
|---|---|---|
| 27-06-2023 | 12:16:15.8650000 | ... |
| 27-06-2023 | 14:46:24.1960000 | ... |
备注:内容来源于stack exchange,提问作者Maya Madajewicz
相关产品推荐
相关产品推荐

