如何使用Pandas从键值对格式TXT数据中提取列
将重复键值对的单列文本转换为结构化DataFrame
问题场景
你用pd.read_table()读取的TXT文件数据呈现为单列多行的键值对形式,每4行对应一条完整记录(包含Date、Temperature、Humidity、CO2 level四个字段),需要将其转换为字段作为列、每条记录作为行的标准DataFrame。
实现步骤与代码
以下是高效的转换方案:
读取原始数据
先读取文件得到单列的原始DataFrame:import pandas as pd # 替换为你的实际文件路径 df_raw = pd.read_table('data.txt', header=None, names=['raw'])拆分键和值
将每行的键值对拆分为独立的两列:# 按': '(冒号加空格)拆分,生成键、值两列 df_split = df_raw['raw'].str.split(': ', expand=True) df_split.columns = ['key', 'value']分组并透视成结构化数据
利用索引整数除法给每条记录分配分组ID,再通过透视表转换为目标格式:# 每4行划分为一组,生成分组标识 df_split['group_id'] = df_split.index // 4 # 透视表转换:分组ID作为行,字段名作为列,对应值填充 df_final = df_split.pivot(index='group_id', columns='key', values='value').reset_index(drop=True) # 可选:调整列顺序与预期一致 df_final = df_final[['Date', 'Temperature', 'Humidity', 'CO2 level']]
最终效果
运行后df_final将呈现如下结构化格式:
| Date | Temperature | Humidity | CO2 level |
|---|---|---|---|
| 23:15 | 20 C | 40 | 14 |
| 23:20 | 28 C | 45 | 18 |
| 23:25 | 35 C | 35 | 20 |
| 23:30 | 22 C | 52 | 12 |
补充提示
- 该方案仅适用于每组字段顺序固定、数量一致的情况;
- 拆分时必须用
:作为分隔符,避免误拆时间字段里的冒号。
内容的提问来源于stack exchange,提问作者Ibrat Usmonov
相关产品推荐
相关产品推荐

