Pandas對CSV文件讀寫操作詳解
什么是 CSV 文件
CSV 文件(逗號分隔值文件)是一種純文本文件,它使用特定的結(jié)構(gòu)來排列表格數(shù)據(jù)。因為它是一個純文本文件,所以只能包含實際的文本數(shù)據(jù),換句話說就是可打印的 ASCII 或 Unicode 字符。
通常,CSV 文件的結(jié)構(gòu)由其名稱給出,使用逗號分隔每個特定數(shù)據(jù)值。
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 ...
每條數(shù)據(jù)是如何用逗號分隔的。第一行為數(shù)據(jù)列的名稱,有的時候也可以為空第一行就是實際的數(shù)據(jù)。之后的每一行都是實際數(shù)據(jù),僅受文件大小限制。
CSV 文件從何而來?
CSV 文件通常由處理大量數(shù)據(jù)的程序創(chuàng)建。從電子表格和數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)以及在其他程序中導(dǎo)入。例如可以將數(shù)據(jù)挖掘程序的結(jié)果導(dǎo)出為 CSV 文件,然后將其導(dǎo)入電子表格以分析數(shù)據(jù)、生成圖表以進行演示或準備發(fā)布報告。
CSV 文件非常容易以編程方式處理。任何支持文本文件輸入和字符串操作的語言(如 Python)都可以直接處理 CSV 文件。
CSV 庫解析 CSV 文件
csv 庫提供讀取和寫入 CSV 文件的功能。專為使用 Excel 生成的 CSV 文件開箱即用而設(shè)計,適應(yīng)各種 CSV 格式。該 csv 庫包含對象和其他代碼,用于從 CSV 文件讀取、寫入和處理數(shù)據(jù)。

讀取 CSV 文件
CSV 文件使用 Python 的內(nèi)置open()函數(shù)作為文本文件打開,該函數(shù)返回一個文件對象。然后使用 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.')最終輸出的結(jié)果是一樣的。
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 參數(shù)
reader 對象可以通過指定附加參數(shù)來處理不同樣式的 CSV 文件。
delimiter 指定用于分隔每個字段的字符,默認值為逗號 (‘,’)。
quotechar 指定用于包圍包含分隔符的字段的字符,默認值為雙引號 ( ’ " ')。
escapechar 指定用于轉(zhuǎn)義分隔符的字符以防不使用引號,默認是沒有轉(zhuǎn)義字符。
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 字段的數(shù)據(jù)還包含一個逗號來表示郵政編碼。
思考一下這個應(yīng)該怎么處理?
CSV 文件的寫入
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) # 非數(shù)字加引號
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 庫解析 CSV 文件
pandas 是一個開源 Python 庫,提供高性能的數(shù)據(jù)分析工具和易于使用的數(shù)據(jù)結(jié)構(gòu),可以共享數(shù)據(jù)、代碼、分析結(jié)果、可視化和敘述性文本。

pandas 讀取 CSV 文件
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讀取數(shù)據(jù)時可以格式化日期格式。
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 文件
讀取到 pandas 的內(nèi)容可以直接寫入到新的 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文件讀寫操作詳解的詳細內(nèi)容,更多關(guān)于Pandas讀寫CSV的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python創(chuàng)建Getter和Setter的方法詳解
Getters?和?Setters?是幫助我們設(shè)置類變量或?qū)傩远鵁o需直接訪問的方法,這篇文章主要和大家介紹了如何在Python中創(chuàng)建Getter和Setter,需要的可以參考下2023-10-10
Python操作MySQL數(shù)據(jù)庫的示例代碼
這篇文章主要介紹了Python操作MySQL數(shù)據(jù)庫的方法,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07
Django執(zhí)行源生mysql語句實現(xiàn)過程解析
這篇文章主要介紹了Django執(zhí)行源生mysql語句實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
Python: tkinter窗口屏幕居中,設(shè)置窗口最大,最小尺寸實例
這篇文章主要介紹了Python: tkinter窗口屏幕居中,設(shè)置窗口最大,最小尺寸實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
Python中處理字符串之endswith()方法的使用簡介
這篇文章主要介紹了Python中處理字符串之endswith()方法的使用,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05

