如何用Pandas动态读取CSV:定位START-DATA后设表头与|分隔符
解决方法
一、拆分已读取的单列数据
你当前得到的单列DataFrame,可以用字符串拆分方法按|分割成多列,同时处理分隔符前后的空格:
# 用正则匹配带空格的|,拆分列并展开为多列 df_split = df_2[0].str.split(r'\s*\|\s*', expand=True) # 将第一行设为表头 df_split.columns = df_split.iloc[0] # 移除表头行并重置索引 df_final = df_split.drop(df_split.index[0]).reset_index(drop=True)
二、批量读取这类文件的高效方法
不需要先读取整个文件再处理,直接定位每个文件中START-DATA的位置,精准读取数据效率更高:
1. 单个文件处理函数
import pandas as pd def load_custom_csv(file_path): # 逐行遍历文件,找到START-DATA的行号 with open(file_path, 'r') as f: start_row = None for line_num, line in enumerate(f): if line.strip() == 'START-DATA': start_row = line_num + 1 # 下一行是表头,作为读取起始行 break # 读取数据,skipinitialspace=True自动忽略分隔符前后的空格 return pd.read_csv( file_path, skiprows=start_row, delimiter='|', skipinitialspace=True )
2. 批量读取并合并
import os # 替换为你的CSV文件所在文件夹路径 target_folder = "你的文件夹路径" all_dfs = [] # 遍历文件夹下所有CSV文件 for filename in os.listdir(target_folder): if filename.lower().endswith('.csv'): full_path = os.path.join(target_folder, filename) df = load_custom_csv(full_path) all_dfs.append(df) # 合并所有数据(按需选择) merged_df = pd.concat(all_dfs, ignore_index=True)
内容的提问来源于stack exchange,提问作者anarchy
相关产品推荐
相关产品推荐

