如何读取带分组标识的file.txt并生成含Group列的DataFrame
解决按分组标记读取文本生成带Group列的DataFrame问题
问题描述
现有file.txt文件内容如下:
///// A 13 32 12 13 4 22 34 42 ///// B 3 1 34 11 0 NaN 21 1 44 32 33 32 ///// C 5 32 11 21 43 23 NaN 3
需要读取该文件,将数据按/////后的字母分组,生成包含Group列的DataFrame,格式如下:
0 1 2 3 Group 13 32 12 13 A 4 22 34 42 A 3 1 34 11 B 0 NaN 21 1 B 44 32 33 32 B 5 32 11 21 C 43 23 NaN 3 C
使用pd.read_table时,仅能通过comment='/'参数忽略分组行,无法将数据与对应分组关联,需要可行的解决方案。
解决方案
方法一:逐行解析文件
手动逐行读取文件,识别分组标记并记录当前分组,再收集对应数据行,最后转换为DataFrame:
import pandas as pd data_rows = [] current_group = None with open('file.txt', 'r') as f: for line in f: stripped_line = line.strip() # 跳过空行 if not stripped_line: continue # 识别分组行,提取分组名称 if stripped_line.startswith('/////'): current_group = stripped_line.split()[-1] continue # 处理数据行,拆分后添加分组信息 split_data = stripped_line.split() # 转换数值,将字符串NaN转为pandas可识别的缺失值 processed_data = [float(x) if x != 'NaN' else pd.NA for x in split_data] data_rows.append(processed_data + [current_group]) # 转换为目标DataFrame result_df = pd.DataFrame(data_rows, columns=[0, 1, 2, 3, 'Group']) print(result_df)
方法二:利用pandas文本读取+分组填充
先读取所有内容,再通过标记行识别分组并向前填充分组信息:
import pandas as pd # 读取所有行,保留分组标记行,指定NaN识别规则 raw_df = pd.read_csv( 'file.txt', sep='\s+', header=None, skip_blank_lines=True, na_values=['NaN'], names=['col0', 'col1', 'col2', 'col3'] ) # 标记分组行,提取分组名称并向前填充 raw_df['Group'] = raw_df['col0'].where(raw_df['col0'].str.startswith('/////', na=False)) \ .str.split().str[-1] \ .ffill() # 过滤掉分组标记行,重置索引 final_df = raw_df[~raw_df['col0'].str.startswith('/////', na=False)].reset_index(drop=True) print(final_df)
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

