将文本文件多行数值转换为CSV并生成指定格式DataFrame
生成目标DataFrame的解决方案
处理步骤及代码
可以用Python的pandas库直接处理这份文本数据,生成符合要求的DataFrame:
1. 核心思路
逐行解析文本内容:
- 每行第一个元素作为
ID列 - 第二个元素若无法转为浮点数,则作为
Tag列;否则Tag列设为缺失值 - 剩余元素全部转为浮点数,按顺序命名为
Val1、Val2等列,缺失位置自动填充为缺失值
2. 完整代码示例
import pandas as pd import numpy as np # 原始文本数据 text_data = """foo no 3.61 9.51 bar -26 67 2.35 0.50 70 baz dxo 6 2.37 quez -9.07 51 udx 9.66 9.66 scz -8 pdu hk 0.50 -5.34 -13 0.50 ytrs bl 1.27 -63 -0.66 xle 29 1.27 -8.19 drl -9.68 8.84 -29 -13 -86 kos -5.34 51 91 wen di 9.84 -2.35 88""" # 解析每行数据 parsed_rows = [] for line in text_data.split('\n'): elements = line.strip().split() if not elements: continue current_row = {'ID': elements[0]} # 判断第二个元素是否为标签 try: float(elements[1]) current_row['Tag'] = np.nan numeric_vals = list(map(float, elements[1:])) except ValueError: current_row['Tag'] = elements[1] numeric_vals = list(map(float, elements[2:])) # 添加数值列 for idx, val in enumerate(numeric_vals, 1): current_row[f'Val{idx}'] = val parsed_rows.append(current_row) # 生成DataFrame并填充缺失值 result_df = pd.DataFrame(parsed_rows).fillna(np.nan) print(result_df)
3. 最终DataFrame格式
运行代码后得到的结果如下:
| ID | Tag | Val1 | Val2 | Val3 | Val4 | Val5 |
|---|---|---|---|---|---|---|
| foo | no | 3.61 | 9.51 | NaN | NaN | NaN |
| bar | NaN | -26.00 | 67.00 | 2.35 | 0.50 | 70.00 |
| baz | dxo | 6.00 | 2.37 | NaN | NaN | NaN |
| quez | NaN | -9.07 | 51.00 | NaN | NaN | NaN |
| udx | NaN | 9.66 | 9.66 | NaN | NaN | NaN |
| scz | NaN | -8.00 | NaN | NaN | NaN | NaN |
| pdu | hk | 0.50 | -5.34 | -13.00 | 0.50 | NaN |
| ytrs | bl | 1.27 | -63.00 | -0.66 | NaN | NaN |
| xle | NaN | 29.00 | 1.27 | -8.19 | NaN | NaN |
| drl | NaN | -9.68 | 8.84 | -29.00 | -13.00 | -86.00 |
| kos | NaN | -5.34 | 51.00 | 91.00 | NaN | NaN |
| wen | di | 9.84 | -2.35 | 88.00 | NaN | NaN |
内容的提问来源于stack exchange,提问作者mackuo
相关产品推荐
相关产品推荐

