pandas to_csv保存多级索引DataFrame后读取如何保留原索引表头
多级索引DataFrame CSV存读结构丢失解决方案
问题原因
默认参数下pd.to_csv仅写入数据文本内容,不会记录多级列头、行索引的结构元信息,直接用默认参数pd.read_csv读取时,pandas无法自动识别层级结构,就会出现Unnamed:0列、首行空值、索引/表头丢失的问题。
方案1:指定CSV读取参数,完整还原结构
不需要修改原有CSV存储逻辑,读取时传入对应参数指定结构即可:
header=[0,1]:声明前2行属于多级列头index_col=0:声明第1列为行索引skipinitialspace=True:自动处理单元格前后的冗余空格,避免列名匹配错误
对应读取代码:
import pandas as pd df = pd.read_csv( "dataframe_faces.csv", header=[0, 1], index_col=0, skipinitialspace=True )
读取完成后可以通过print(df.columns)、print(df.index)校验,结构和原始DataFrame完全一致,不会出现异常空行或无意义列。
方案2:高保真场景用pandas原生序列化格式
CSV是通用纯文本格式,本身不支持存储结构化元信息,如果不需要兼容非pandas的读取场景,优先用pickle格式存储,可以100%还原DataFrame的索引、列头、数据类型,不需要额外指定读取参数:
# 存储 az.to_pickle("dataframe_faces.pkl") # 读取 df = pd.read_pickle("dataframe_faces.pkl")
提示:pickle为pandas专属二进制格式,仅适合在Python/pandas生态内传递数据,需要跨工具共享数据时选择CSV参数方案。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

