Pandas对CSV文件读写操作详解
目录
- 什么是 CSV 文件
- CSV 库解析 CSV 文件
- 读取 CSV 文件
- CSV reader 参数
- CSV 文件的写入
- 使用 pandas 库解析 CSV 文件
- pandas 读取 CSV 文件
- pandas 写入 CSV 文件
什么是 CSV 文件 CSV 文件(逗号分隔值文件)是一种纯文本文件,它使用特定的结构来排列表格数据。因为它是一个纯文本文件,所以只能包含实际的文本数据,换句话说就是可打印的 ASCII 或 Unicode 字符。
通常,CSV 文件的结构由其名称给出,使用逗号分隔每个特定数据值。
column 1 name,column 2 name, column 3 namefirst row data 1,first row data 2,first row data 3second row data 1,second row data 2,second row data 3...
每条数据是如何用逗号分隔的。第一行为数据列的名称,有的时候也可以为空第一行就是实际的数据。之后的每一行都是实际数据,仅受文件大小限制。
CSV 文件从何而来?
CSV 文件通常由处理大量数据的程序创建。从电子表格和数据库中导出数据以及在其他程序中导入。例如可以将数据挖掘程序的结果导出为 CSV 文件,然后将其导入电子表格以分析数据、生成图表以进行演示或准备发布报告。
CSV 文件非常容易以编程方式处理。任何支持文本文件输入和字符串操作的语言(如 Python)都可以直接处理 CSV 文件。
CSV 库解析 CSV 文件 csv 库提供读取和写入 CSV 文件的功能。专为使用 Excel 生成的 CSV 文件开箱即用而设计,适应各种 CSV 格式。该 csv 库包含对象和其他代码,用于从 CSV 文件读取、写入和处理数据。
文章图片
读取 CSV 文件
CSV 文件使用 Python 的内置open()函数作为文本文件打开,该函数返回一个文件对象。然后使用 reader 对象完成从 CSV 文件中的读取。
employee_birthday.txt
name,department,birthday monthJohn Smith,Accounting,NovemberErica Meyers,IT,March
直接读取的方法。
import csvwith open('employee_birthday.txt') as csv_file:csv_reader = csv.reader(csv_file, delimiter=',')line_count = 0for row in csv_reader:if line_count == 0:print(f'Column names are {", ".join(row)}')line_count += 1else:print(f'\t{row[0]} works in the {row[1]} department, and was born in {row[2]}.')line_count += 1print(f'Processed {line_count} lines.')
字典方式读取的方法。
import csvwith open('employee_birthday.txt', mode='r') as csv_file:csv_reader = csv.DictReader(csv_file)line_count = 0for row in csv_reader:if line_count == 0:print(f'Column names are {", ".join(row)}')line_count += 1print(f'\t{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.')line_count += 1print(f'Processed {line_count} lines.')
最终输出的结果是一样的。
Column names are name, department, birthday month
John Smith works in the Accounting department, and was born in November.
Erica Meyers works in the IT department, and was born in March.
Processed 3 lines.
CSV reader 参数
reader 对象可以通过指定附加参数来处理不同样式的 CSV 文件。
delimiter 指定用于分隔每个字段的字符,默认值为逗号 (‘,’)。
quotechar 指定用于包围包含分隔符的字段的字符,默认值为双引号 ( ’ " ')。
escapechar 指定用于转义分隔符的字符以防不使用引号,默认是没有转义字符。
employee_addresses.txt
name,address,date joinedjohn smith,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4erica meyers,1234 Smith Lane Hoboken NJ, 07030,March 2
此 CSV 文件包含三个字段:name、address 和 date joined,由逗号分隔。问题是 address 字段的数据还包含一个逗号来表示邮政编码。
思考一下这个应该怎么处理?
CSV 文件的写入
CSV 文件的写入可以使用 .write_row() 方法进行操作。
import csvwith open('employee_file.csv', mode='w') as employee_file:employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)employee_writer.writerow(['John Smith', 'Accounting', 'November'])employee_writer.writerow(['Erica Meyers', 'IT', 'March'])
quotechar 用来包围含特殊字符的字段,排除歧义使用。
quoting的几种控制引号行为情况:
csv.QUOTE_NONNUMERIC) # 非数字加引号
csv.QUOTE_ALL # 所有字段加引号
csv.QUOTE_MINIMAL # 特殊字段加引号
csv.QUOTE_NONE # 都不加引号
字典方式写入。
import csvwith open('employee_file2.csv', mode='w') as csv_file:fieldnames = ['emp_name', 'dept', 'birth_month']writer = csv.DictWriter(csv_file, fieldnames=fieldnames)writer.writeheader()writer.writerow({'emp_name': 'John Smith', 'dept': 'Accounting', 'birth_month': 'November'})writer.writerow({'emp_name': 'Erica Meyers', 'dept': 'IT', 'birth_month': 'March'})
employee_file2.csv
emp_name,dept,birth_monthJohn Smith,Accounting,NovemberErica Meyers,IT,March
使用 pandas 库解析 CSV 文件 pandas 是一个开源 Python 库,提供高性能的数据分析工具和易于使用的数据结构,可以共享数据、代码、分析结果、可视化和叙述性文本。
文章图片
pandas 读取 CSV 文件
hrdata.csv
Name,Hire Date,Salary,Sick Days remainingGraham Chapman,03/15/14,50000.00,10John Cleese,06/01/15,65000.00,8Eric Idle,05/12/14,45000.00,10Terry Jones,11/01/13,70000.00,3Terry Gilliam,08/12/14,48000.00,7Michael Palin,05/23/13,66000.00,8
使用pandas可以快速的读取。
import pandasdf = pandas.read_csv('hrdata.csv')print(df)Name Hire DateSalarySick Days remaining0Graham Chapman03/15/1450000.0101John Cleese06/01/1565000.082Eric Idle05/12/1445000.0103Terry Jones11/01/1370000.034Terry Gilliam08/12/1448000.075Michael Palin05/23/1366000.08
使用pandas读取数据时可以格式化日期格式。
import pandasdf = pandas.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date'])print(df)Hire DateSalarySick Days remainingNameGraham Chapman 2014-03-1550000.010John Cleese2015-06-0165000.08Eric Idle2014-05-1245000.010Terry Jones2013-11-0170000.03Terry Gilliam2014-08-1248000.07Michael Palin2013-05-2366000.08
pandas 写入 CSV 文件
读取到 pandas 的内容可以直接写入到新的 csv 文件。
import pandasdf = pandas.read_csv('hrdata.csv', index_col='Employee', parse_dates=['Hired'],header=0, names=['Employee', 'Hired', 'Salary', 'Sick Days'])df.to_csv('hrdata_modified.csv')print(df)Employee,Hired,Salary,Sick DaysGraham Chapman,2014-03-15,50000.0,10John Cleese,2015-06-01,65000.0,8Eric Idle,2014-05-12,45000.0,10Terry Jones,2013-11-01,70000.0,3Terry Gilliam,2014-08-12,48000.0,7Michael Palin,2013-05-23,66000.0,8
【Pandas对CSV文件读写操作详解】以上就是Pandas对CSV文件读写操作详解的详细内容,更多关于Pandas读写CSV的资料请关注脚本之家其它相关文章!
推荐阅读
- Redis(开发与运维):13---哈希/散列对象
- Kubernetes——对外服务之Ingress
- JavaScript把两个数组对象合并成一个一一对应的数组对象
- PHP fputcsv()函数用法示例
- python面向对象编程(类和对象详解介绍 – Python高级开发教程)
- SpringBoot|Spring Boot 参考文档(官网对照翻译)
- 如何获取JavaScript对象的最后一项()
- 投稿|对决微信支付宝,华为支付有没有戏?
- 漫威蜘蛛侠的五种方式(Miles Morales针对PS5进行了优化)
- BioWare承诺对Anthem进行“长期重新设计”