4.5.1-读写CSV文件.md

4.5.1 读写CSV文件

CSV(Comma-Separated Values,逗号分隔值)是一种常见的用于存储表格数据的纯文本格式。第4.5节「数据读取和存储」包含读写CSV与读写Excel,本节先掌握CSV。使用 to_csv() 和 read_csv() 函数可以实现CSV文件的存取。二者调用对象不同:to_csv() 是数据框的成员,要通过数据框对象调用,例如 df.to_csv('renshu.csv', index=True);read_csv() 是pandas的成员,要通过pandas调用,例如 pd.read_csv('renshu.csv'),该函数将CSV文件读取为数据框对象。导入惯例为 import pandas as pd,以及 from pandas import DataFrame。

课程示例是一张各专业人数表。二维列表 data = [[800, 750, 500], [700, 800, 600], [680, 720, 580]] 作为行数据,col=['会计', '保险', '外语'] 指定列标签,ind=['2022','2023','2024'] 指定行标签,df = DataFrame(data, columns=col, index=ind)。写出时 index=True 指示保存索引,renshu.csv 内容为:首行 ,会计,保险,外语,随后三行 2022,800,750,500、2023,700,800,600、2024,680,720,580。若 index=False,则不保存索引,首行改为 会计,保险,外语,数据行不再出现年份。CSV默认用逗号分隔数据,也可用 sep 指定其他分隔符:df.to_csv('renshu.csv', index=True, sep='\t') 表示用制表符分隔。

读入时必须根据文件内容设置 index_col 和 sep:如果文件第一列是索引,则设置 index_col(本例 index_col=0),否则不设置;再按文件实际分隔符设置 sep。与制表符示例对应的读法是 df = pd.read_csv('renshu.csv', index_col=0, sep='\t')。pandas默认使用UTF-8编码。如果文件是用pandas的 to_csv 写的,read_csv 时不用指定编码;如果文件是别的方式创建的,读取时需要指定创建时的编码,否则会出现中文乱码。教案将「处理文件读写时的数据格式和编码问题」列为难点。

易错点:不要把 to_csv 写成 pd.to_csv(),也不要把 read_csv 当成数据框方法。写出保存了索引却在读入时不设 index_col,年份会变成普通列,行标签还原失败。写出用了 sep='\t' 而读入仍按默认逗号切分,各列会对不齐。遇到中文乱码,应先确认文件是否由 to_csv 生成,以及编码是否与创建方式一致。不要把本节的 to_csv/read_csv 与下一节的 to_excel/read_excel 混用。

关键要点

下载此文件