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

使用to_csv()保存DataFrame后,导入时索引被识别为列的问题

解决Pandas保存自定义索引后读取时索引变列的问题

问题根源

你用df.to_csv()保存DataFrame时,默认不会把自定义索引当作"索引"写入CSV,而是会把它当成普通的一列存进去,所以再次读取时pandas就会把它识别成普通列,而非索引。

两种解决方法

方法1:保存时明确保留索引

修改你保存CSV的代码,添加index=True参数,让pandas把索引单独写入CSV的第一列,还可以给索引列指定名称(可选):

# 保存时保留索引,同时给索引列命名(比如你的索引是元素符号,就叫"元素符号")
df.to_csv('period_table.csv', index=True, index_label='元素符号')

这样生成的CSV里,第一列就是你的自定义索引,后续读取时能直接对应上。

方法2:读取时指定索引列

如果已经保存了CSV不想重新生成,就在读取时用index_col参数告诉pandas哪一列是索引(默认保存的索引是第0列):

df = pd.read_csv('period_table.csv', index_col=0)

额外优化:简化你的原代码

原代码里手动循环拆分字符串的部分可以用pandas的str.split简化,避免低效的循环,同时避免固定长度导致的不匹配问题:

import pandas as pd
import numpy as np

# 直接读取CSV,无需额外转成DataFrame
df = pd.read_csv('elementi.csv')
# 拆分elementi列,直接生成两列数据
df[['elementi', '自定义索引']] = df['elementi'].str.split(';', expand=True)
# 重新构建DataFrame并设置自定义索引
df = df.set_index('自定义索引')[['elementi']]

# 移除不需要的元素(如果索引是数字类型,切片有效;如果是字符串需调整定位逻辑)
df = df.drop(df.loc[103:117].index)
df = df.drop(df.loc[90:104].index)
df = df.drop(df.loc[58:72].index)

# 根据当前DataFrame长度生成随机列,避免固定76导致的长度不匹配
row_count = len(df)
ipo_oso = np.random.randint(0, 3, row_count)
oso = np.random.randint(3, 5, row_count)
ico = np.random.randint(5, 6, row_count)
per_ico = np.random.randint(6, 7, row_count)

# 添加列到DataFrame
df['ipo_oso'] = ipo_oso
df['oso'] = oso
df['ico'] = ico
df['per_ico'] = per_ico

# 保存时保留索引
df.to_csv('period_table.csv', index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:55:16