You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python批量读取维度不一致的TXT文件并转为Pandas DataFrame

批量处理特殊结构TXT文件为Pandas DataFrame

针对你遇到的维度不匹配问题,这里提供两种自动化批量处理方案,对应你提到的手动补全列和跳过序号列两种需求:

方案1:补全前两行的第一列(与手动操作逻辑一致)

给前两行开头添加指定标识,统一所有行的字段数为46,保留后续行的序号列。

import pandas as pd
import glob

def process_single_file(file_path):
    # 读取所有行内容
    with open(file_path, 'r') as f:
        lines = f.readlines()
    
    # 给前两行开头补全标识(匹配手动添加'r1'/'r2'的逻辑)
    lines[0] = f'r1\t{lines[0].strip()}\n'  # 分隔符根据实际文件调整,如空格则用' '代替'\t'
    lines[1] = f'r2\t{lines[1].strip()}\n'
    
    # 将处理后的内容转为DataFrame
    df = pd.read_csv(pd.compat.StringIO(''.join(lines)), sep='\s+')
    return df

# 批量遍历所有TXT文件(替换为你的文件路径)
file_paths = glob.glob('./correlation_files/*.txt')
# 按文件名存储处理后的DataFrame
processed_dfs = {fp.split('/')[-1].split('.')[0]: process_single_file(fp) for fp in file_paths}

# 可选:合并所有文件的DataFrame,保留文件来源标识
combined_df = pd.concat(processed_dfs.values(), keys=processed_dfs.keys(), names=['Source_File', 'Row_Index'])

注意:如果文件用空格而非制表符分隔,把'\t'换成' '即可;若分隔符不规则,sep='\s+'会自动匹配任意数量空白字符。

方案2:跳过后续行的第一列(简化处理)

若不需要保留后续行的序号列,直接跳过第一列,让所有行字段数统一为45。

import pandas as pd
import glob

def process_single_file(file_path):
    # 读取前两行作为列名(根据需求调整,比如作为多级列名)
    with open(file_path, 'r') as f:
        bin_names_r1 = f.readline().strip().split()
        bin_names_r2 = f.readline().strip().split()
    
    # 读取后续行,跳过第一列(usecols指定读取第2到第46列)
    df = pd.read_csv(
        file_path,
        sep='\s+',
        skiprows=2,
        usecols=range(1, 46),
        names=bin_names_r1
    )
    
    # 可选:将两行bin编号设为多级列名,更清晰展示维度
    df.columns = pd.MultiIndex.from_tuples(
        list(zip(bin_names_r1, bin_names_r2)),
        names=['Bin_R1', 'Bin_R2']
    )
    return df

# 批量处理逻辑同方案1
file_paths = glob.glob('./correlation_files/*.txt')
processed_dfs = {fp.split('/')[-1].split('.')[0]: process_single_file(fp) for fp in file_paths}
combined_df = pd.concat(processed_dfs.values(), keys=processed_dfs.keys(), names=['Source_File', 'Row_Index'])

排查提示:如果仍报维度错误,尝试添加engine='python'参数到pd.read_csv中,Python引擎对不规则分隔的兼容性更好。

内容的提问来源于stack exchange,提问作者Bipradeep Saha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:24:23