<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
CSV 檔案(逗號分隔值檔案)是一種純文字檔案,它使用特定的結構來排列表格資料。因為它是一個純文字檔案,所以只能包含實際的文字資料,換句話說就是可列印的 ASCII 或 Unicode 字元。
通常,CSV 檔案的結構由其名稱給出,使用逗號分隔每個特定資料值。
column 1 name,column 2 name, column 3 name first row data 1,first row data 2,first row data 3 second row data 1,second row data 2,second row data 3 ...
每條資料是如何用逗號分隔的。第一行為資料列的名稱,有的時候也可以為空第一行就是實際的資料。之後的每一行都是實際資料,僅受檔案大小限制。
CSV 檔案從何而來?
CSV 檔案通常由處理大量資料的程式建立。從電子試算表和資料庫中匯出資料以及在其他程式中匯入。例如可以將資料探勘程式的結果匯出為 CSV 檔案,然後將其匯入電子試算表以分析資料、生成圖表以進行演示或準備釋出報告。
CSV 檔案非常容易以程式設計方式處理。任何支援文字檔案輸入和字串操作的語言(如 Python)都可以直接處理 CSV 檔案。
csv 庫提供讀取和寫入 CSV 檔案的功能。專為使用 Excel 生成的 CSV 檔案開箱即用而設計,適應各種 CSV 格式。該 csv 庫包含物件和其他程式碼,用於從 CSV 檔案讀取、寫入和處理資料。
CSV 檔案使用 Python 的內建open()函數作為文字檔案開啟,該函數返回一個檔案物件。然後使用 reader 物件完成從 CSV 檔案中的讀取。
employee_birthday.txt
name,department,birthday month John Smith,Accounting,November Erica Meyers,IT,March
直接讀取的方法。
import csv with open('employee_birthday.txt') as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 for row in csv_reader: if line_count == 0: print(f'Column names are {", ".join(row)}') line_count += 1 else: print(f't{row[0]} works in the {row[1]} department, and was born in {row[2]}.') line_count += 1 print(f'Processed {line_count} lines.')
字典方式讀取的方法。
import csv with open('employee_birthday.txt', mode='r') as csv_file: csv_reader = csv.DictReader(csv_file) line_count = 0 for row in csv_reader: if line_count == 0: print(f'Column names are {", ".join(row)}') line_count += 1 print(f't{row["name"]} works in the {row["department"]} department, and was born in {row["birthday month"]}.') line_count += 1 print(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.
reader 物件可以通過指定附加引數來處理不同樣式的 CSV 檔案。
delimiter 指定用於分隔每個欄位的字元,預設值為逗號 (‘,’)。
quotechar 指定用於包圍包含分隔符的欄位的字元,預設值為雙引號 ( ’ " ')。
escapechar 指定用於跳脫分隔符的字元以防不使用引號,預設是沒有跳脫字元。
employee_addresses.txt
name,address,date joined john smith,1132 Anywhere Lane Hoboken NJ, 07030,Jan 4 erica meyers,1234 Smith Lane Hoboken NJ, 07030,March 2
此 CSV 檔案包含三個欄位:name、address 和 date joined,由逗號分隔。問題是 address 欄位的資料還包含一個逗號來表示郵政編碼。
思考一下這個應該怎麼處理?
CSV 檔案的寫入可以使用 .write_row() 方法進行操作。
import csv with 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 csv with 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_month John Smith,Accounting,November Erica Meyers,IT,March
pandas 是一個開源 Python 庫,提供高效能的資料分析工具和易於使用的資料結構,可以共用資料、程式碼、分析結果、視覺化和敘述性文字。
hrdata.csv
Name,Hire Date,Salary,Sick Days remaining Graham Chapman,03/15/14,50000.00,10 John Cleese,06/01/15,65000.00,8 Eric Idle,05/12/14,45000.00,10 Terry Jones,11/01/13,70000.00,3 Terry Gilliam,08/12/14,48000.00,7 Michael Palin,05/23/13,66000.00,8
使用pandas可以快速的讀取。
import pandas df = pandas.read_csv('hrdata.csv') print(df) Name Hire Date Salary Sick Days remaining 0 Graham Chapman 03/15/14 50000.0 10 1 John Cleese 06/01/15 65000.0 8 2 Eric Idle 05/12/14 45000.0 10 3 Terry Jones 11/01/13 70000.0 3 4 Terry Gilliam 08/12/14 48000.0 7 5 Michael Palin 05/23/13 66000.0 8
使用pandas讀取資料時可以格式化日期格式。
import pandas df = pandas.read_csv('hrdata.csv', index_col='Name', parse_dates=['Hire Date']) print(df) Hire Date Salary Sick Days remaining Name Graham Chapman 2014-03-15 50000.0 10 John Cleese 2015-06-01 65000.0 8 Eric Idle 2014-05-12 45000.0 10 Terry Jones 2013-11-01 70000.0 3 Terry Gilliam 2014-08-12 48000.0 7 Michael Palin 2013-05-23 66000.0 8
讀取到 pandas 的內容可以直接寫入到新的 csv 檔案。
import pandas df = 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 Days Graham Chapman,2014-03-15,50000.0,10 John Cleese,2015-06-01,65000.0,8 Eric Idle,2014-05-12,45000.0,10 Terry Jones,2013-11-01,70000.0,3 Terry Gilliam,2014-08-12,48000.0,7 Michael Palin,2013-05-23,66000.0,8
以上就是Pandas對CSV檔案讀寫操作詳解的詳細內容,更多關於Pandas讀寫CSV的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45