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

使用Pandas DataFrame向指定列写入数据时遇问题求助

问题原因

你遇到的KeyError是因为:

  • 用pd.DataFrame(df)把列表转成DataFrame时,默认生成的列名是0,但你在to_csv里指定了columns=header(流派名称),这些列名在当前DataFrame中不存在,所以触发错误。
  • 代码中创建的CSV文件是music.csv,但追加时写的是Sector.csv,文件名不统一也会导致后续操作无效。
解决方法

根据你的需求(将Beethoven追加到Classical列),提供两种可行方案:

方案1:仅给Classical列追加一行Beethoven

修改DataFrame构造逻辑,明确指定列名,只给Classical列赋值:

import pandas as pd
import csv

header = ["Blues", "Jazz", "Rock", "Country", "Pop", "Rap", "Metal", "Classical"]

# 创建带表头的CSV文件
with open("music.csv", "w") as SectorCSV:
    csvwriter = csv.writer(SectorCSV, lineterminator="\n")
    print("Creating music.csv")
    csvwriter.writerow(header)

# 构造仅Classical列有值的DataFrame
new_row = pd.DataFrame({"Classical": ["Beethoven"]})
# 追加到CSV,不重复写入表头
new_row.to_csv("music.csv", index=False, mode="a", header=False)

方案2:批量将艺术家分配到对应流派列

如果需要把多个艺术家分别放到对应的流派列(比如Adele到Pop、Nirvana到Rock等),可以按流派映射构造DataFrame:

import pandas as pd
import csv

header = ["Blues", "Jazz", "Rock", "Country", "Pop", "Rap", "Metal", "Classical"]

with open("music.csv", "w") as SectorCSV:
    csvwriter = csv.writer(SectorCSV, lineterminator="\n")
    print("Creating music.csv")
    csvwriter.writerow(header)

# 定义艺术家与流派的对应关系
artist_genre_mapping = [
    {"Classical": "Beethoven"},
    {"Classical": "Mozart"},
    {"Pop": "Adele"},
    {"Pop": "Beyonce"},
    {"Rock": "Nirvana"},
    {"Rap": "Eminem"},
    {"Metal": "Metallica"},
    {"Classical": "Bach"}
]

# 构造DataFrame,自动补全未赋值的列为空
df = pd.DataFrame(artist_genre_mapping)
# 按表头顺序追加数据,不重复写表头
df.to_csv("music.csv", index=False, mode="a", header=False, columns=header)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:45:30