Python?中?Pandas?文件操作和讀取?CSV?參數(shù)詳解
一、Pandas 讀取文件
- 當(dāng)使用 Pandas 做數(shù)據(jù)分析的時(shí),需要讀取事先準(zhǔn)備好的數(shù)據(jù)集,這是做數(shù)據(jù)分析的第一步。Panda 提供了多種讀取數(shù)據(jù)的方法,針對(duì)不同的文件格式,有以下幾種:
- (1) read_csv() 用于讀取文本文件。
- (2) read_excel() 用于讀取文本文件。
- (3) read_json() 用于讀取 json 文件。
- (4) read_sql_query() 讀取 sql 語(yǔ)句的。
- 其通用的流程如下:
- (1) 導(dǎo)入庫(kù) import pandas as pd。
- (2) 找到文件所在位置(絕對(duì)路徑 = 全稱(chēng))(相對(duì)路徑 = 和程序在同一個(gè)文件夾中的路徑的簡(jiǎn)稱(chēng))。
- (3) 變量名 = pd.讀寫(xiě)操作方法(文件路徑,具體的篩選條件,……)。
二、CSV 文件讀取
- CSV 又稱(chēng)逗號(hào)分隔值文件,是一種簡(jiǎn)單的文件格式,以特定的結(jié)構(gòu)來(lái)排列表格數(shù)據(jù)。 CSV 文件能夠以純文本形式存儲(chǔ)表格數(shù)據(jù),比如電子表格、數(shù)據(jù)庫(kù)文件,并具有數(shù)據(jù)交換的通用格式。CSV 文件會(huì)在 Excel 文件中被打開(kāi),其行和列都定義了標(biāo)準(zhǔn)的數(shù)據(jù)格式。
- 將 CSV 中的數(shù)據(jù)轉(zhuǎn)換為 DataFrame 對(duì)象是非常便捷的。和一般文件讀寫(xiě)不一樣,它不需要你做打開(kāi)文件、讀取文件、關(guān)閉文件等操作。相反,您只需要一行代碼就可以完成上述所有步驟,并將數(shù)據(jù)存儲(chǔ)在 DataFrame 中。
- 下面進(jìn)行實(shí)例演示,源數(shù)據(jù)如下:

首先,我們對(duì) CSV 文件進(jìn)行讀取,可以通過(guò)相對(duì)路徑,也可以通過(guò) os 動(dòng)態(tài)取得絕對(duì)路徑 os.getcwd() os.path.json。
import pandas as pd
df = pd.read_csv("./data/my_csv.csv")
print(df,type(df))
# col1 col2 col3 col4 col5
#0 2 a 1.4 apple 2022/1/1
#1 3 b 3.4 banana 2022/1/2
#2 6 c 2.5 orange 2022/1/5
#3 5 d 3.2 grape 2022/1/7 <class 'pandas.core.frame.DataFrame'>我們可以通過(guò) os.getcwd() 讀取文件的存儲(chǔ)路徑。
import os os.getcwd() #'C:\\Users\\CQB\\Desktop\\內(nèi)蒙農(nóng)業(yè)大學(xué)數(shù)據(jù)分析教案和代碼\\第16天'
其語(yǔ)法模板如下:
read_csv(filepath_or_buffer, sep=',', header='infer', names=None, index_col=None, usecols=None, squeeze=None, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=None, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, encoding_errors='strict', dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None, storage_options=None)
1. 基本參數(shù)
- (1) filepath_or_buffer(數(shù)據(jù)輸入的路徑):可以是文件路徑、可以是 URL,也可以是實(shí)現(xiàn) read 方法的任意對(duì)象。這個(gè)參數(shù),就是我們輸入的第一個(gè)參數(shù)。
- 我們可以直接 read_csv 讀取我們想要的文件。
import pandas as pd pd.read_csv(r"data\students.csv") #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
- 還可以是一個(gè) URL,如果訪問(wèn)該 URL 會(huì)返回一個(gè)文件的話(huà),那么 pandas 的 read_csv函 數(shù)會(huì)自動(dòng)將該文件進(jìn)行讀取。比如:我們服務(wù)器上放的數(shù)據(jù),將剛才的文件返回。
- 但需要注意的是,他需要網(wǎng)絡(luò)請(qǐng)求,因此讀取文件比較慢。
pd.read_csv("http://my-teaching.top/static/data/students.csv") 里面還可以是一個(gè) _io.TextIOWrapper,其中,pandas 默認(rèn)使用 utf-8 讀取文件,比如:
f = open(r"data\students.csv", encoding="utf-8") pd.read_csv(f) #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
(2) sep:讀取 csv 文件時(shí)指定的分隔符,默認(rèn)為逗號(hào)。注意:csv 文件的分隔符和我們讀取 csv 文件時(shí)指定的分隔符一定要一致。
import pandas as pd pd.read_csv(r"data\students_step.csv") #id|name|address|gender|birthday #0 1|朱夢(mèng)雪|地球村|女|2004/11/2 #1 2|許文博|月亮星|女|2003/8/7 #2 3|張兆媛|艾爾星|女|2004/11/2 #3 4|付延旭|克哈星|男|2003/10/11 #4 5|王杰|查爾星|男|2002/6/12 #5 6|董澤宇|塔桑尼斯|男|2002/2/12
由于指定的分隔符和 csv 文件采用的分隔符不一致,因此多個(gè)列之間沒(méi)有分開(kāi),而是連在一起了。 所以,我們需要將分隔符設(shè)置成 \t 才可以。
df = pd.read_csv(r"data\students_step.csv", sep="|") df #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
(3) delim_whitespace:默認(rèn)為 False,設(shè)置為 True 時(shí),表示分割符為空白字符,可以是空格、\t 等等。不管分隔符是什么,只要是空白字符,那么可以通過(guò) delim_whitespace=True 進(jìn)行讀取。如下,我們對(duì) delim_whitespace 不設(shè)置,也就是默認(rèn)為 False,會(huì)發(fā)現(xiàn)讀取有點(diǎn)問(wèn)題。
df = pd.read_csv(r"data\students_whitespace.txt", sep=" ") df #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博\t月亮星 女 2003/8/7 NaN #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰\t查爾星 男 2002/6/12 NaN #5 6 董澤宇\t塔桑尼斯 男 2002/2/12 NaN
對(duì)此,我們將 delim_whitespace 設(shè)置為 True,便會(huì)得到我們想要的讀取結(jié)果。
df = pd.read_csv(r"data\students_whitespace.txt", delim_whitespace=True) df #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
- (4) header:用作列名的行號(hào),以及數(shù)據(jù)的開(kāi)頭。
- 默認(rèn)行為是推斷列名:如果沒(méi)有傳遞任何名稱(chēng),則該行為與 header=0 相同,并且從文件的第一行推斷列名,如果顯式傳遞列名,則該行為與 header=None 相同。
- 顯式傳遞 header=0 以替換現(xiàn)有名稱(chēng)。標(biāo)題可以是整數(shù)列表,指定列上多索引的行位置,例如 [0,1,3]。未指定的中間行將被跳過(guò)(例如,本例中跳過(guò) 2 行)。
- 這里需要注意,如果 skip_blank_lines=True,此參數(shù)將忽略注釋行和空行,因此 header=0 表示數(shù)據(jù)的第一行,而不是文件的第一行。
- (5) names:當(dāng) names 沒(méi)被賦值時(shí),header 會(huì)變成 0,即選取數(shù)據(jù)文件的第一行作為列名;當(dāng) names 被賦值,header 沒(méi)被賦值時(shí),那么 header 會(huì)變成 None。如果都賦值,就會(huì)實(shí)現(xiàn)兩個(gè)參數(shù)的組合功能。
- (a) names 沒(méi)有被賦值,header 也沒(méi)賦值:
- 這種情況下,header 為 0,即選取文件的第一行作為表頭。
pd.read_csv(r"data\students.csv") #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
- (b) names 沒(méi)有被賦值,header 被賦值:
- 如果不指定 names,指定 header 為 1,則選取第二行當(dāng)做表頭,第二行下面為數(shù)據(jù)。
pd.read_csv(r"data\students.csv", header=1) #1 朱夢(mèng)雪 地球村 女 2004/11/2 #0 2 許文博 月亮星 女 2003/8/7 #1 3 張兆媛 艾爾星 女 2004/11/2 #2 4 付延旭 克哈星 男 2003/10/11 #3 5 王杰 查爾星 男 2002/6/12 #4 6 董澤宇 塔桑尼斯 男 2002/2/12
(c) names 被賦值,header 沒(méi)有被賦值:
pd.read_csv(r"data\students.csv", names=["編號(hào)", "姓名", "地址", "性別", "出生日期"]) #編號(hào) 姓名 地址 性別 出生日期 #0 id name address gender birthday #1 1 朱夢(mèng)雪 地球村 女 2004/11/2 #2 2 許文博 月亮星 女 2003/8/7 #3 3 張兆媛 艾爾星 女 2004/11/2 #4 4 付延旭 克哈星 男 2003/10/11 #5 5 王杰 查爾星 男 2002/6/12 #6 6 董澤宇 塔桑尼斯 男 2002/2/12
- 可以看到,names 適用于沒(méi)有表頭的情況,指定 names 沒(méi)有指定 header,那么 header 相當(dāng)于 None。
- 一般來(lái)說(shuō),讀取文件的時(shí)候會(huì)有一個(gè)表頭,一般默認(rèn)是第一行,但是有的文件中是沒(méi)有表頭的,那么這個(gè)時(shí)候就可以通過(guò) names 手動(dòng)指定、或者生成表頭,而文件里面的數(shù)據(jù)則全部是內(nèi)容。
- 所以這里 id、name、address、date 也當(dāng)成是一條記錄了,本來(lái)它是表頭的,但是我們指定了 names,所以它就變成數(shù)據(jù)了,表頭是我們?cè)?names 里面指定的。
- (a) names 和 header 都被賦值:
pd.read_csv(r"data\students.csv",
names=["編號(hào)", "姓名", "地址", "性別", "出生日期"],
header=1)
#編號(hào) 姓名 地址 性別 出生日期
#0 2 許文博 月亮星 女 2003/8/7
#1 3 張兆媛 艾爾星 女 2004/11/2
#2 4 付延旭 克哈星 男 2003/10/11
#3 5 王杰 查爾星 男 2002/6/12
#4 6 董澤宇 塔桑尼斯 男 2002/2/12- 這個(gè)時(shí)候,相當(dāng)于先不看 names,只看 header,header 為 0 代表先把第一行當(dāng)做表頭,下面的當(dāng)成數(shù)據(jù);然后再把表頭用 names 給替換掉。
- names 和 header 的使用場(chǎng)景主要如下:
- (1) csv 文件有表頭并且是第一行,那么 names 和 header 都無(wú)需指定;
- (2) csv 文件有表頭、但表頭不是第一行,可能從下面幾行開(kāi)始才是真正的表頭和數(shù)據(jù),這個(gè)時(shí)候指定 header 即可;
- (3) csv 文件沒(méi)有表頭,全部是純數(shù)據(jù),那么我們可以通過(guò) names 手動(dòng)生成表頭;
- (4) csv 文件有表頭、但是這個(gè)表頭你不想用,這個(gè)時(shí)候同時(shí)指定 names 和 header。先用 header 選出表頭和數(shù)據(jù),然后再用 names 將表頭替換掉,就等價(jià)于將數(shù)據(jù)讀取進(jìn)來(lái)之后再對(duì)列名進(jìn)行 rename。
- (6) index_col:我們?cè)谧x取文件之后所得到的 DataFrame 的索引默認(rèn)是 0、1、2……,我們可以通過(guò) set_index 設(shè)定索引,但是也可以在讀取的時(shí)候就指定某列為索引。
df = pd.read_csv(r"data\students.csv", index_col="birthday") df # id name address gender #birthday #2004/11/2 1 朱夢(mèng)雪 地球村 女 #2003/8/7 2 許文博 月亮星 女 #2004/11/2 3 張兆媛 艾爾星 女 #2003/10/11 4 付延旭 克哈星 男 #2002/6/12 5 王杰 查爾星 男 #2002/2/12 6 董澤宇 塔桑尼斯 男
也可以用來(lái)刪除指定列。
df.index=df['birthday'] del df['birthday'] df # id name address gender #birthday #2004/11/2 1 朱夢(mèng)雪 地球村 女 #2003/8/7 2 許文博 月亮星 女 #2004/11/2 3 張兆媛 艾爾星 女 #2003/10/11 4 付延旭 克哈星 男 #2002/6/12 5 王杰 查爾星 男 #2002/2/12 6 董澤宇 塔桑尼斯 男
我們?cè)谧x取的時(shí)候指定了 name 列作為索引; 此外,除了指定單個(gè)列,還可以指定多列作為索引,比如 [“id”, “name”]。同時(shí),我們除了可以輸入列名外,還可以輸入列對(duì)應(yīng)的索引。比如:“id”、“name”、“address”、"date"對(duì)應(yīng)的索引就分別是 0、1、2、3。
df2 = pd.read_csv(r"data\students.csv", index_col=["gender","birthday"]) df2 # id name address #gender birthday #女 2004/11/2 1 朱夢(mèng)雪 地球村 # 2003/8/7 2 許文博 月亮星 # 2004/11/2 3 張兆媛 艾爾星 #男 2003/10/11 4 付延旭 克哈星 # 2002/6/12 5 王杰 查爾星 # 2002/2/12 6 董澤宇 塔桑尼斯
使用 loc 刪選也是同樣的道理。
df2.loc["女"] # id name address #birthday #2004/11/2 1 朱夢(mèng)雪 地球村 #2003/8/7 2 許文博 月亮星 #2004/11/2 3 張兆媛 艾爾星
- (7) usecols:返回列的子集。
- 如果是類(lèi)似列表的,則所有元素都必須是位置性的(即文檔列中的整數(shù)索引),或者是與用戶(hù)在名稱(chēng)中提供的列名或從文檔標(biāo)題行推斷的列名相對(duì)應(yīng)的字符串。如果給出了名稱(chēng),則不考慮文檔標(biāo)題行。
pd.read_csv(r"data\students.csv", usecols=["name","birthday"]) # name #0 朱夢(mèng)雪 #1 許文博 #2 張兆媛 #3 付延旭 #4 王杰 #5 董澤宇
2. 通用解析參數(shù)
(1) encoding:表示這只編碼格式,utf-8,gbk。
pd.read_csv(r"data\students_gbk.csv") # UnicodeDecodeError
- 如果提示錯(cuò)誤喂 UnicodeDecodeError —> 需要想到編碼問(wèn)題。
- pandas 默認(rèn)使用 utf-8 格式讀取。
pd.read_csv(r"data\students_gbk.csv", encoding="gbk") #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
- (2) dtype:在讀取數(shù)據(jù)的時(shí)候,設(shè)定字段的類(lèi)型。
- 比如,公司員工的 id 一般是:00001234,如果默認(rèn)讀取的時(shí)候,會(huì)顯示為 1234,所以這個(gè)時(shí)候要把他轉(zhuǎn)為字符串類(lèi)型,才能正常顯示為 00001234。
df = pd.read_csv(r"data\students_step_001.csv", sep="|") df #id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7 #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
我們將 id 的數(shù)據(jù)類(lèi)型設(shè)置為字符串,便可以顯示為 001 之類(lèi)的。
df = pd.read_csv(r"data\students_step_001.csv", sep="|", dtype ={"id":str})
df
#id name address gender birthday
#0 001 朱夢(mèng)雪 地球村 女 2004/11/2
#1 002 許文博 月亮星 女 2003/8/7
#2 003 張兆媛 艾爾星 女 2004/11/2
#3 004 付延旭 克哈星 男 2003/10/11
#4 005 王杰 查爾星 男 2002/6/12
#5 006 董澤宇 塔桑尼斯 男 2002/2/12- (3) converters:在讀取數(shù)據(jù)的時(shí)候?qū)α袛?shù)據(jù)進(jìn)行變換.
- 例如將 id 增加 10,但是注意 int(x),在使用 converters 參數(shù)時(shí),解析器默認(rèn)所有列的類(lèi)型為 str,所以需要進(jìn)行類(lèi)型轉(zhuǎn)換。
pd.read_csv('data\students.csv', converters={"id": lambda x: int(x) + 10})
#id name address gender birthday
#0 11 朱夢(mèng)雪 地球村 女 2004/11/2
#1 12 許文博 月亮星 女 2003/8/7
#2 13 張兆媛 艾爾星 女 2004/11/2
#3 14 付延旭 克哈星 男 2003/10/11
#4 15 王杰 查爾星 男 2002/6/12
#5 16 董澤宇 塔桑尼斯 男 2002/2/12- (4) true_values 和 false_values:指定哪些值應(yīng)該被清洗為 True,哪些值被清洗為 False。
- 我們以性別為例,男設(shè)置為 True,女設(shè)置為 False。
pd.read_csv('data\students.csv', true_values=['男'], false_values=['女'])
# id name address gender birthday
#0 1 朱夢(mèng)雪 地球村 False 2004/11/2
#1 2 許文博 月亮星 False 2003/8/7
#2 3 張兆媛 艾爾星 False 2004/11/2
#3 4 付延旭 克哈星 True 2003/10/11
#4 5 王杰 查爾星 True 2002/6/12
#5 6 董澤宇 塔桑尼斯 True 2002/2/12- 這里的替換規(guī)則為,只有當(dāng)某一列的數(shù)據(jù)類(lèi)別全部出現(xiàn)在 true_values + false_values 里面,才會(huì)被替換。
- (5) skiprows:表示過(guò)濾行,想過(guò)濾掉哪些行,就寫(xiě)在一個(gè)列表里面?zhèn)鬟f給 skiprows 即可。注意的是,這里是先過(guò)濾,然后再確定表頭,比如:
pd.read_csv('data\students.csv', skiprows=[0,3])
# 1 朱夢(mèng)雪 地球村 女 2004/11/2
#0 2 許文博 月亮星 女 2003/8/7
#1 4 付延旭 克哈星 男 2003/10/11
#2 5 王杰 查爾星 男 2002/6/12
#3 6 董澤宇 塔桑尼斯 男 2002/2/12這里把第一行過(guò)濾掉了,因?yàn)榈谝恍惺潜眍^,所以在過(guò)濾掉之后第二行就變成表頭了。 當(dāng)然里面除了傳入具體的數(shù)值,來(lái)表明要過(guò)濾掉哪些行,還可以傳入一個(gè)函數(shù)。
pd.read_csv('data\students.csv', skiprows=lambda x: x > 0 and x % 2 == 0)
# id name address gender birthday
#0 1 朱夢(mèng)雪 地球村 女 2004/11/2
#1 3 張兆媛 艾爾星 女 2004/11/2
#2 5 王杰 查爾星 男 2002/6/12- 由于索引從 0 開(kāi)始,所以凡是索引大于 0、并且%2 等于 0 的記錄都過(guò)濾掉。索引大于 0,是為了保證表頭不被過(guò)濾掉。
- (6) skipfooter:表示從文件末尾過(guò)濾行。
pd.read_csv('data\students.csv', skipfooter=1)上述代碼運(yùn)行后會(huì)出現(xiàn)報(bào)錯(cuò),并且表格中的數(shù)據(jù)都變成亂碼,具體原因下方有解釋。
pd.read_csv('data\students.csv', skipfooter=1, engine="python", encoding="utf-8")
# id name address gender birthday
#0 1 朱夢(mèng)雪 地球村 女 2004/11/2
#1 2 許文博 月亮星 女 2003/8/7
#2 3 張兆媛 艾爾星 女 2004/11/2
#3 4 付延旭 克哈星 男 2003/10/11
#4 5 王杰 查爾星 男 2002/6/12- pandas 解析數(shù)據(jù)時(shí)用的引擎,目前解析引擎有兩種:c、python。默認(rèn)為 c,因?yàn)?c 引擎解析速度更快,但是特性沒(méi)有 python 引擎全。
- skipfooter 接收整型,表示從結(jié)尾往上過(guò)濾掉指定數(shù)量的行,因?yàn)橐嫱嘶癁?python,那么要手動(dòng)指定 engine=“python”,不然會(huì)警告。另外需要指定 encoding=“utf-8”,因?yàn)?csv 存在編碼問(wèn)題,當(dāng)引擎退化為 python 的時(shí)候,在 Windows 上讀取會(huì)亂碼。
- (7) nrows:表示設(shè)置一次性讀入的文件行數(shù),在讀入大文件時(shí)很有用,比如 16G 內(nèi)存的 PC 無(wú)法容納幾百 G 的大文件。
pd.read_csv('data\students.csv', nrows=3)
# id name address gender birthday
#0 1 朱夢(mèng)雪 地球村 女 2004/11/2
#1 2 許文博 月亮星 女 2003/8/7
#2 3 張兆媛 艾爾星 女 2004/11/23. 空值處理相關(guān)參數(shù)
na_values:該參數(shù)可以配置哪些值需要處理成 NaN。
pd.read_csv('data\students.csv', na_values=["女", "朱夢(mèng)雪"])
#id name address gender birthday
#0 1 NaN 地球村 NaN 2004/11/2
#1 2 許文博 月亮星 NaN 2003/8/7
#2 3 張兆媛 艾爾星 NaN 2004/11/2
#3 4 付延旭 克哈星 男 2003/10/11
#4 5 王杰 查爾星 男 2002/6/12
#5 6 董澤宇 塔桑尼斯 男 2002/2/12可以看到將女和朱夢(mèng)雪設(shè)置成了NaN,這里的情況是不同的列中包含了不同的值。
4. 時(shí)間處理相關(guān)參數(shù)
- parse_dates:指定某些列為時(shí)間類(lèi)型,這個(gè)參數(shù)一般搭配 date_parser 使用。
- date_parser:是用來(lái)配合 parse_dates 參數(shù)的,因?yàn)橛械牧须m然是日期,但沒(méi)辦法直接轉(zhuǎn)化,需要我們指定一個(gè)解析格式。
df = pd.read_csv('data\students.csv')
df.dtypes
#id int64
#name object
#address object
#gender object
#birthday object
#dtype: object我們通過(guò) parse_dates 將 birthday 設(shè)置為時(shí)間類(lèi)型。
df = pd.read_csv('data\students.csv', parse_dates=["birthday"])
df.dtypes
#id int64
#name object
#address object
#gender object
#birthday datetime64[ns]
#dtype: object5. 分塊讀入相關(guān)參數(shù)
- (1) iterator:迭代器,iterator 為 bool 類(lèi)型,默認(rèn)為 False。
- 如果為 True,那么返回一個(gè) TextFileReader 對(duì)象,以便逐塊處理文件。這個(gè)在文件很大、內(nèi)存無(wú)法容納所有數(shù)據(jù)文件時(shí),可以分批讀入,依次處理。
chunk = pd.read_csv('data\students.csv', iterator=True)
chunk
#<pandas.io.parsers.TextFileReader at 0x1b27f00ef88>我們已經(jīng)對(duì)文件進(jìn)行了分塊操作,可以先提取出前兩行。
print(chunk.get_chunk(2)) # id name address gender birthday #0 1 朱夢(mèng)雪 地球村 女 2004/11/2 #1 2 許文博 月亮星 女 2003/8/7
文件還剩下四行,但是我們指定讀取100,那么也不會(huì)報(bào)錯(cuò),不夠指定的行數(shù),那么有多少返回多少。
print(chunk.get_chunk(100)) # id name address gender birthday #2 3 張兆媛 艾爾星 女 2004/11/2 #3 4 付延旭 克哈星 男 2003/10/11 #4 5 王杰 查爾星 男 2002/6/12 #5 6 董澤宇 塔桑尼斯 男 2002/2/12
這里需要注意的是,在讀取完畢之后,再讀的話(huà)就會(huì)報(bào)錯(cuò)了。(2) chunksize:整型,默認(rèn)為 None,設(shè)置文件塊的大小。chunksize 還是返回一個(gè)類(lèi)似于迭代器的對(duì)象,當(dāng)我們調(diào)用 get_chunk,如果不指定行數(shù),那么就是默認(rèn)的 chunksize。
chunk = pd.read_csv('data\students.csv', chunksize=2)
print(chunk)
print(chunk.get_chunk())
#<pandas.io.parsers.TextFileReader object at 0x000001B27F05C5C8>
# id name address gender birthday
#0 1 朱夢(mèng)雪 地球村 女 2004/11/2
#1 2 許文博 月亮星 女 2003/8/7- 我們?cè)偈褂脙纱?print(chunk.get_chunk()) 就可以分步讀取出所有的數(shù)據(jù),因?yàn)檫@里的 chunksize 設(shè)置為 2。
- 我們也可以指定 chunk.get_chunk() 的參數(shù)。
- 以上便是 pandas 的 read_csv 函數(shù)中絕大部分參數(shù)了,同時(shí)其中的部分參數(shù)也適用于讀取其它類(lèi)型的文件。
- 其實(shí)在讀取 csv 文件時(shí)所使用的參數(shù)不多,很多參數(shù)平常我們都不會(huì)用到的,不過(guò)不妨礙我們了解一下,因?yàn)樵谀承┨囟ǖ膱?chǎng)景下它們是可以很方便地幫我們解決一些問(wèn)題的。
- 個(gè)人感覺(jué)分塊讀取這個(gè)參數(shù)最近在工作中提高了很大的效率。
到此這篇關(guān)于Python 之 Pandas 文件操作和讀取 CSV 參數(shù)詳解的文章就介紹到這了,更多相關(guān)Python Pandas讀取 CSV 參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)的簡(jiǎn)單猜數(shù)字游戲
這篇文章主要介紹了python實(shí)現(xiàn)的簡(jiǎn)單猜數(shù)字游戲,涉及Python操作隨機(jī)數(shù)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
一文探索CPython的變量實(shí)現(xiàn)機(jī)制
在Python中,變量的使用看起來(lái)非常簡(jiǎn)單,然而,這種簡(jiǎn)單的賦值操作背后,CPython其實(shí)做了很多復(fù)雜的工作,下面我們就來(lái)一起探索一下吧2025-02-02
使用python執(zhí)行shell腳本 并動(dòng)態(tài)傳參 及subprocess的使用詳解
這篇文章主要介紹了使用python執(zhí)行shell腳本 并動(dòng)態(tài)傳參 及subprocess的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
python對(duì)json的相關(guān)操作實(shí)例詳解
這篇文章主要介紹了python對(duì)json的相關(guān)操作,結(jié)合實(shí)例形式詳細(xì)分析了json的概念、功能以及Python針對(duì)json的解析、輸出、排序、轉(zhuǎn)換等操作技巧,需要的朋友可以參考下2017-01-01
Python初學(xué)者需要注意的事項(xiàng)小結(jié)(python2與python3)
這篇文章主要介紹了Python初學(xué)者需要注意的事項(xiàng)小結(jié),包括了python2與python3的一些區(qū)別,需要的朋友可以參考下2018-09-09
基于Python實(shí)現(xiàn)敲擊木魚(yú)積累功德效果
最近大家都很流行用手機(jī)敲擊電子木魚(yú)積累功德,這在很多短視頻中也常常見(jiàn)到。本文將用Python語(yǔ)言實(shí)現(xiàn)這一效果,感興趣的小伙伴開(kāi)業(yè)了解一下2022-11-11

