如何用Pandas将含多表头的CSV拆分为表头与数据两个DataFrame?
我来给你拆解下实现这个CSV拆分需求的方法,用Python的pandas库就能轻松搞定,结合你的示例一步一步来:
核心思路
我们需要分两步处理:先把所有表头行提取成单独的DataFrame,再读取剩余的数据行生成另一个DataFrame,同时处理缺失值的转换(比如示例里的-1转成NaN)。
1. 提取所有表头行到第二个DataFrame
假设你的CSV有2行表头(可以根据实际情况调整这个数字),我们先读取这几行,然后把第一行作为表头DataFrame的列名,剩下的行作为数据内容:
import pandas as pd # 定义CSV的表头行数 header_row_count = 2 # 先读取前header_row_count行,不设置列名 raw_header = pd.read_csv('mh.csv', nrows=header_row_count, header=None) # 把第一行作为列名,剩下的行作为表头数据 header_df = pd.DataFrame(raw_header[1:].values, columns=raw_header.iloc[0].tolist())
运行后header_df的结果就和你示例里的一致:
Name Height Age 0 Metres
2. 生成移除指定表头行的第一个DataFrame
接下来读取数据部分,需要跳过所有表头行,用第一行表头作为列名,同时把-1识别为缺失值(NaN):
# 读取数据:跳过前header_row_count行,用第一行做列名,将-1转为NaN data_df = pd.read_csv('mh.csv', skiprows=header_row_count, header=0, na_values=-1)
得到的data_df就是你要的结果:
Name Height Age 0 A NaN 25.0 1 B 95.0 NaN
额外说明
- 如果你的表头行数不是固定的2行,只需要修改
header_row_count的值即可; - 如果需要识别其他缺失值标识(比如空字符串),可以扩展
na_values参数,比如na_values=['-1', '']; - 如果CSV有特殊分隔符或格式,可以在
pd.read_csv里添加sep等参数适配。
内容的提问来源于stack exchange,提问作者Krzysztof Słowiński
相关产品推荐
相关产品推荐

