使用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
相关产品推荐
相关产品推荐

