如何用Python Pandas将特定格式TXT文件转换为目标DataFrame?
解决方法
你的TXT文件结构应该是类似这样的(示例):
Field,Value
First,100
Second,200Field,Value
First,300
Second,400
直接用pd.read_csv读取后调用pivot会出现每行仅一个值的问题,核心原因是没有给每组数据添加分组标识,导致透视时无法把同组的First和Second值归到同一行。下面是两种可行的解决思路:
方法一:手动添加组ID后透视
import pandas as pd # 读取文件并清理空行 with open('your_file.txt', 'r') as f: lines = [line.strip() for line in f if line.strip()] # 分离表头和数据行 header = lines[0].split(',') data_lines = lines[1:] # 给每组数据分配组ID(每2行一组) group_ids = [] current_group = 0 for idx in range(len(data_lines)): if idx % 2 == 0: current_group += 1 group_ids.append(current_group) # 整理数据格式 data = [] for line, gid in zip(data_lines, group_ids): field, value = line.split(',') data.append({'GroupID': gid, header[0]: field, header[1]: value}) # 生成目标DataFrame df = pd.DataFrame(data) result_df = df.pivot(index='GroupID', columns='Field', values='Value').reset_index(drop=True) print(result_df)
方法二:按块读取直接转单行
如果每组固定包含2条数据(不含表头和空行),可以用chunksize按块读取,直接把每个块转成单行:
import pandas as pd # 跳过首行表头,按每2行一块读取数据 chunks = pd.read_csv( 'your_file.txt', skiprows=1, chunksize=2, header=None, names=['Field', 'Value'] ) # 逐个处理块,转成单行后合并 result_rows = [] for chunk in chunks: result_rows.append(chunk.set_index('Field')['Value'].to_dict()) result_df = pd.DataFrame(result_rows) print(result_df)
两种方法都能生成以First和Second为列的DataFrame,解决你遇到的问题。
内容的提问来源于stack exchange,提问作者Arnoldas Bankauskas
相关产品推荐
相关产品推荐

