如何利用分隔符索引列表通过pd.read_fwf生成DataFrame?
解决方案:利用起始索引列表自动生成列分割规则
方法1:将起始索引转换为colspecs参数(推荐)
你手里的起始索引列表[0, 17, 30, 45, 58]可以直接转换成pd.read_fwf需要的colspecs格式(即每列的起始、结束索引对),不用手动逐个输入。具体步骤:
先把起始索引转换成列的起止范围:
starts = [0, 17, 30, 45, 58] # 生成每列的(start, end),最后一列设为None表示到行尾 colspecs = [(starts[i], starts[i+1]) for i in range(len(starts)-1)] + [(starts[-1], None)]用
pd.read_fwf读取文件,若标题行带感叹号,可先提取列名再读取数据:import pandas as pd # 读取标题行并处理列名(去掉感叹号、清理空格) with open("your_file.txt", "r", encoding="utf-8") as f: header_line = f.readline().strip() column_names = [header_line[starts[i]:starts[i+1]].strip().replace("!", "") for i in range(len(starts)-1)] column_names.append(header_line[starts[-1]:].strip().replace("!", "")) # 读取数据,跳过标题行并指定列名 df = pd.read_fwf("your_file.txt", colspecs=colspecs, skiprows=1, names=column_names)
方法2:手动逐行分割(适用于复杂格式)
如果read_fwf仍有适配问题,可以手动读取每行按索引分割,再转成DataFrame:
import pandas as pd starts = [0, 17, 30, 45, 58] data = [] with open("your_file.txt", "r", encoding="utf-8") as f: # 跳过标题行 next(f) for line in f: line = line.strip() # 按索引分割每行内容并清理空格 row = [line[starts[i]:starts[i+1]].strip() for i in range(len(starts)-1)] row.append(line[starts[-1]:].strip()) data.append(row) # 转成DataFrame并指定列名 df = pd.DataFrame(data, columns=column_names)
多文件批量处理方案
把上述逻辑封装成函数,即可批量处理所有文件:
def txt_to_df(file_path, starts): # 生成列分割规则 colspecs = [(starts[i], starts[i+1]) for i in range(len(starts)-1)] + [(starts[-1], None)] # 提取并处理列名 with open(file_path, "r", encoding="utf-8") as f: header_line = f.readline().strip() column_names = [header_line[starts[i]:starts[i+1]].strip().replace("!", "") for i in range(len(starts)-1)] column_names.append(header_line[starts[-1]:].strip().replace("!", "")) # 读取文件并返回DataFrame return pd.read_fwf(file_path, colspecs=colspecs, skiprows=1, names=column_names) # 批量处理文件列表 file_list = ["file1.txt", "file2.txt", "file3.txt"] all_dfs = [txt_to_df(file, starts=[0,17,30,45,58]) for file in file_list] # 合并所有DataFrame(按需使用) combined_df = pd.concat(all_dfs, ignore_index=True)
内容的提问来源于stack exchange,提问作者Not_a_Robot
相关产品推荐
相关产品推荐

