如何用Python处理CSV:跳过START-OF-DATA前的行并添加表头
解决CSV跳过指定行前内容并导入DataFrame的方法
以下是几种实现需求的Python方案,可直接从START-OF-DATA行的下一行读取数据并添加自定义表头:
方法1:先定位起始行再读取
先遍历文件找到标记行的位置,再精准读取有效数据:
import pandas as pd csv_path = "你的CSV文件路径.csv" start_marker = "START-OF-DATA" skip_count = 0 # 遍历文件统计需要跳过的行数 with open(csv_path, 'r', encoding='utf-8') as f: for line in f: if start_marker in line: break skip_count += 1 # 从标记行的下一行开始读取,同时设置自定义表头 custom_header = ["列名1", "列名2", "列名3"] # 替换为你的实际表头 df = pd.read_csv(csv_path, skiprows=skip_count + 1, names=custom_header)
方法2:用生成器过滤有效行
通过生成器直接跳过无效内容,只传递有效数据给pandas:
import pandas as pd csv_path = "你的CSV文件路径.csv" start_marker = "START-OF-DATA" custom_header = ["列名1", "列名2", "列名3"] def get_valid_rows(file_path, marker): with open(file_path, 'r', encoding='utf-8') as f: # 跳过标记行之前的所有内容 for line in f: if marker in line: break # 输出剩下的所有有效行 yield from f # 读取过滤后的内容到DataFrame df = pd.read_csv(get_valid_rows(csv_path, start_marker), names=custom_header)
方法3:全量导入后截取有效部分
若你偏好先导入全部内容再处理,可按以下方式操作:
import pandas as pd csv_path = "你的CSV文件路径.csv" start_marker = "START-OF-DATA" custom_header = ["列名1", "列名2", "列名3"] # 先全量读取所有内容(无表头) raw_df = pd.read_csv(csv_path, header=None) # 定位标记行的索引 marker_row_idx = raw_df[raw_df[0].str.contains(start_marker, na=False)].index[0] # 截取标记行之后的内容并设置表头 df = raw_df.iloc[marker_row_idx + 1:].reset_index(drop=True) df.columns = custom_header
内容的提问来源于stack exchange,提问作者joebob
相关产品推荐
相关产品推荐

