溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

發(fā)布時(shí)間:2023-03-22 10:56:08 來(lái)源:億速云 閱讀:158 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“怎么使用Pandas進(jìn)行數(shù)據(jù)讀取”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“怎么使用Pandas進(jìn)行數(shù)據(jù)讀取”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

使用pandas進(jìn)行數(shù)據(jù)讀取,最常讀取的數(shù)據(jù)格式如下:

NO數(shù)據(jù)類型說(shuō)明使用方法1csv, tsv, txt可以讀取純文本文件pd.read_csv2excel可以讀取.xls .xlsx 文件pd.read_excel3mysql讀取關(guān)系型數(shù)據(jù)庫(kù)pd.read_sql

pd.read_csv

pandas對(duì)純文本的讀取提供了非常強(qiáng)力的支持,參數(shù)有四五十個(gè)。這些參數(shù)中,有的很容易被忽略,但是在實(shí)際工作中卻用處很大。pd.read_csv() 的格式如下:

read_csv(
	reader: FilePathOrBuffer, *, 
	sep: str = ..., 
	delimiter: str | None = ..., 
	header: int | Sequence[int] | str = ..., 
	names: Sequence[str] | None = ..., 
	index_col: int | str | Sequence | Literal[False] | None = ..., 
	usecols: int | str | Sequence | None = ..., 
	squeeze: bool = ..., 
	prefix: str | None = ..., 
	mangle_dupe_cols: bool = ..., 
	dtype: str | Mapping[str, Any] | None = ..., 
	engine: str | None = ..., 
	converters: Mapping[int | str, (*args, **kwargs) -> Any] | None = ..., 
	true_values: Sequence[Scalar] | None = ..., 
	false_values: Sequence[Scalar] | None = ..., 
	skipinitialspace: bool = ..., 
	skiprows: Sequence | int | (*args, **kwargs) -> Any | None = ..., 
	skipfooter: int = ..., nrows: int | None = ..., na_values=..., 
	keep_default_na: bool = ..., na_filter: bool = ..., 
	verbose: bool = ..., skip_blank_lines: bool = ..., 
	parse_dates: bool | List[int] | List[str] = ..., 
	infer_datetime_format: bool = ..., 
	keep_date_col: bool = ..., 
	date_parser: (*args, **kwargs) -> Any | None = ..., 
	dayfirst: bool = ..., cache_dates: bool = ..., 
	iterator: Literal[True], 
	chunksize: int | None = ..., 
	compression: str | None = ..., 
	thousands: str | None = ..., 
	decimal: str | None = ..., 
	lineterminator: str | None = ..., 
	quotechar: str = ..., 
	quoting: int = ..., 
	doublequote: bool = ..., 
	escapechar: str | None = ..., 
	comment: str | None = ..., 
	encoding: str | None = ..., 
	dialect: str | None = ..., 
	error_bad_lines: bool = ..., 
	warn_bad_lines: bool = ..., 
	delim_whitespace: bool = ..., 
	low_memory: bool = ..., 
	memory_map: bool = ..., 
	float_precision: str | None = ...)

1. FilePathOrBuffer

可以是文件路徑,可以是網(wǎng)頁(yè)上的文件,也可以是文件對(duì)象,實(shí)例如下:

# 文件路徑讀取
file_path=r"E:\VSCODE\2_numpy_pandas\pandas\Game_Data.csv"
f_df = pd.read_csv(file_path,sep=",|:|;",engine="python",header=0,encoding='gbk')
print(f_df)

# 網(wǎng)頁(yè)上的文件讀取
f_df = pd.read_csv("http://localhost/data.csv")

# 文件對(duì)象讀取
f = open(r"E:\VSCODE\2_numpy_pandas\pandas\Game_Data.csv", encoding="gbk")
f_df = pd.read_csv(f)

2. sep

讀取csv文件時(shí)指定的分隔符,默認(rèn)為逗號(hào)。注意:“csv文件的分隔符” 和 “我們讀取csv文件時(shí)指定的分隔符” 一定要一致。多個(gè)分隔符時(shí),應(yīng)該使用 | 將不同的分隔符隔開(kāi);例如:

f_df = pd.read_csv(file_path,sep=":|;",engine="python",header=0)

3. delim_whitespace(不常用)

所有的空白字符,都可以用此來(lái)作為間隔,該值默認(rèn)為False, 若我們將其更改為 True 則所有的空白字符:空格,\t, \n 等都會(huì)被當(dāng)做分隔符;和sep功能相似;

4. header 和 names

這兩個(gè)功能相輔相成,header 用來(lái)指定列名,例如header =0,則指定第一行為列名;若header =1 則指定第二行為列名;有時(shí),我們的數(shù)據(jù)里沒(méi)有列名,只有數(shù)據(jù),這時(shí)候就需要names=[], 來(lái)指定列名;詳細(xì)說(shuō)明如下:

csv文件有表頭并且是第一行,那么names和header都無(wú)需指定;csv文件有表頭、但表頭不是第一行,可能從下面幾行開(kāi)始才是真正的表頭和數(shù)據(jù),這個(gè)時(shí)候指定header即可;csv文件沒(méi)有表頭,全部是純數(shù)據(jù),那么我們可以通過(guò)names手動(dòng)生成表頭;csv文件有表頭、但是這個(gè)表頭你不想用,這個(gè)時(shí)候同時(shí)指定names和header。先用header選出表頭和數(shù)據(jù),然后再用names將表頭替換掉,其實(shí)就等價(jià)于將數(shù)據(jù)讀取進(jìn)來(lái)之后再對(duì)列名進(jìn)行rename;

舉例如下:

names 沒(méi)有被賦值,header 也沒(méi)賦值:

file_path=r"E:\VSCODE\2_numpy_pandas\pandas\Game_Data.csv"
df=pd.read_csv(file_path,sep=",|:|;",engine="python",header=0,encoding='gbk')
print(df)
# 我們說(shuō)這種情況下,header為變成0,即選取文件的第一行作為表頭

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

names 沒(méi)有被賦值,header 被賦值:

pd.read_csv(file_path,sep=",|:|;",engine="python",header=1,encoding='gbk')
# 不指定names,指定header為1,則選取第二行當(dāng)做表頭,第二行下面的是數(shù)據(jù)

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

names 被賦值,header 沒(méi)有被賦值

pd.read_csv(file_path,sep=",|:|;",engine="python",encoding='gbk',names=["編號(hào)", "英雄", "游戲", "發(fā)行日期"])

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

names適用于沒(méi)有表頭的情況,指定names沒(méi)有指定header,那么header相當(dāng)于None。一般來(lái)說(shuō),讀取文件會(huì)有一個(gè)表頭的,一般是第一行,但是有的文件只是數(shù)據(jù)而沒(méi)有表頭,那么這個(gè)時(shí)候我們就可以通過(guò)names手動(dòng)指定、或者生成表頭,而文件里面的數(shù)據(jù)則全部是內(nèi)容。所以這里"編號(hào)", “角色”, “源于”, “發(fā)行日” 也當(dāng)成是一條記錄了,本來(lái)它是表頭的,但是我們指定了names,所以它就變成數(shù)據(jù)了,表頭是我們?cè)趎ames里面指定的

names和header都被賦值:

pd.read_csv(file_path,sep=",|:|;",engine="python",encoding='gbk',names=["編號(hào)", "英雄", "游戲", "發(fā)行日期"],header=0)

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

這個(gè)相當(dāng)于先不看names,只看header,我們說(shuō)header等于0代表什么呢?顯然是把第一行當(dāng)做表頭,下面的當(dāng)成數(shù)據(jù),好了,然后再把表頭用names給替換掉。

5. index_col

我們?cè)谧x取文件之后,生成的 DataFrame 的索引默認(rèn)是0 1 2 3…,我們當(dāng)然可以 set_index,但是也可以在讀取的時(shí)候就指定某個(gè)列為索引。

pd.read_csv(file_path,engine="python",encoding='gbk',header=0,index_col="角色")

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

這里指定 “name” 作為索引,另外除了指定單個(gè)列,還可以指定多個(gè)列,比如 [“id”, “name”]。并且我們除了可以輸入列的名字之外,還可以輸入對(duì)應(yīng)的索引。比如:“id”、“name”、“address”、“date” 對(duì)應(yīng)的索引就分別是0、1、2、3。

6. usecols

如果列有很多,而我們不想要全部的列、而是只要指定的列就可以使用這個(gè)參數(shù)。

pd.read_csv(file_path,encoding='gbk',usecols=["角色", "發(fā)行日"])

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

同 index_col 一樣,除了指定列名,也可以通過(guò)索引來(lái)選擇想要的列,比如:usecols=[1, 3] 也會(huì)選擇 “角色” 和 “發(fā)行日” 兩列,因?yàn)?“角色” 這一列對(duì)應(yīng)的索引是 1、“發(fā)行日” 對(duì)應(yīng)的索引是 3。

此外 use_cols 還有一個(gè)比較好玩的用法,就是接收一個(gè)函數(shù),會(huì)依次將列名作為參數(shù)傳遞到函數(shù)中進(jìn)行調(diào)用,如果返回值為真,則選擇該列,不為真,則不選擇。

# 選擇列名的長(zhǎng)度等于 3 的列,顯然此時(shí)只會(huì)選擇 發(fā)行日 這一列
pd.read_csv(file_path,encoding='gbk',usecols=lambda x:len(x)==3)

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

7. mangle_dupe_cols

實(shí)際生產(chǎn)用的數(shù)據(jù)會(huì)很復(fù)雜,有時(shí)導(dǎo)入的數(shù)據(jù)會(huì)含有重名的列。參數(shù) mangle_dupe_cols 默認(rèn)為 True,重名的列導(dǎo)入后面多一個(gè) .1。如果設(shè)置為 False,會(huì)拋出不支持的異常:

# ValueError: Setting mangle_dupe_cols=False is not supported yet

8. prefix

prefix 參數(shù),當(dāng)導(dǎo)入的數(shù)據(jù)沒(méi)有 header 時(shí),設(shè)置此參數(shù)會(huì)自動(dòng)加一個(gè)前綴。比如:

pd.read_csv(file_path,encoding='gbk',header=None,prefix="角色")

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

9. dtype

有時(shí)候,工作人員的id都是以0開(kāi)頭的,比如0100012521,這是一個(gè)字符串。但是在讀取的時(shí)候解析成整型了,結(jié)果把開(kāi)頭的0給丟了。這個(gè)時(shí)候我們就可以通過(guò)dtype來(lái)指定某個(gè)列的類型,就是告訴pandas:你在解析的時(shí)候不要自以為是,直接按照老子指定的類型進(jìn)行解析就可以了,我不要你覺(jué)得,我要我覺(jué)得。

df=pd.read_csv(file_path,encoding='gbk',dtype={"編號(hào)": str})df["編號(hào)"]=df["編號(hào)"]*4

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

10. engine

pandas解析數(shù)據(jù)時(shí)用的引擎,pandas 目前的解析引擎提供兩種:c、python,默認(rèn)為 c,因?yàn)?c 引擎解析速度更快,但是特性沒(méi)有 python 引擎全。如果使用 c 引擎沒(méi)有的特性時(shí),會(huì)自動(dòng)退化為 python 引擎。

比如使用分隔符進(jìn)行解析,如果指定分隔符不是單個(gè)字符、或者"\s+“,那么c引擎就無(wú)法解析了。我們知道如果分隔符為空白字符的話,那么可以指定delim_whitespace=True,但是也可以指定sep=r”\s+"。

df=pd.read_csv(file_path,encoding='gbk',dtype={"編號(hào)": str})
df["編號(hào)"]=df["編號(hào)"]*4

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

我們看到雖然自動(dòng)退化,但是彈出了警告,這個(gè)時(shí)候需要手動(dòng)的指定engine="python"來(lái)避免警告。這里面還用到了encoding參數(shù),這個(gè)后面會(huì)說(shuō),因?yàn)橐嬉坏┩嘶?,在Windows上不指定會(huì)讀出亂碼。這里我們看到sep是可以支持正則的,但是說(shuō)實(shí)話sep這個(gè)參數(shù)都會(huì)設(shè)置成單個(gè)字符,原因是讀取的csv文件的分隔符是單個(gè)字符。

11. converters

可以在讀取的時(shí)候?qū)α袛?shù)據(jù)進(jìn)行變換:

pd.read_csv(file_path,encoding='gbk', converters={<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->"編號(hào)": lambda x: int(x) + 10})

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

將id增加10,但是注意 int(x),在使用converters參數(shù)時(shí),解析器默認(rèn)所有列的類型為 str,所以需要顯式類型轉(zhuǎn)換。

12. true_values和false_value

指定哪些值應(yīng)該被清洗為True,哪些值被清洗為False。

pd.read_csv(file_path,encoding='gbk',true_values=["林克","奎托斯","褪色者","葦名弦一羊"],false_values=["馬里奧"])

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

注意這里的替換規(guī)則,只有當(dāng)某一列的數(shù)據(jù)全部出現(xiàn)在true_values + false_values里面,才會(huì)被替換。例如執(zhí)行以下內(nèi)容,不會(huì)發(fā)生變化;

pd.read_csv(file_path,encoding='gbk',true_values=["林克"],false_values=["馬里奧"])

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

13. skiprows

skiprows 表示過(guò)濾行,想過(guò)濾掉哪些行,就寫(xiě)在一個(gè)列表里面?zhèn)鬟f給skiprows即可。注意的是:這里是先過(guò)濾,然后再確定表頭,比如:

pd.read_csv(file_path,encoding='gbk',skiprows=[0])

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

我們把第一行過(guò)濾掉了,但是第一行是表頭,所以過(guò)濾掉之后,第二行就變成表頭了。如果過(guò)濾掉第二行,那么只相當(dāng)于少了一行數(shù)據(jù),但是表頭還是原來(lái)的第一行。

當(dāng)然里面除了傳入具體的數(shù)值,來(lái)表明要過(guò)濾掉哪些行,還可以傳入一個(gè)函數(shù)。

pd.read_csv(file_path,encoding='gbk',skiprows=lambda x:x>0 and x%2==1)

由于索引從0開(kāi)始,凡是索引2等于1的記錄都過(guò)濾掉。索引大于0,是為了保證表頭不被過(guò)濾掉。

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

14. skipfooter

從文件末尾過(guò)濾行,解析引擎退化為 Python。這是因?yàn)?C 解析引擎沒(méi)有這個(gè)特性。

pd.read_csv(file_path,encoding='gbk',skipfooter=2)

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

如果不想報(bào)以上的Warning, 可以將Engine 指定為Python, 如下:

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

skipfooter接收整型,表示從結(jié)尾往上過(guò)濾掉指定數(shù)量的行,因?yàn)橐嫱嘶癁閜ython,那么要手動(dòng)指定engine=“python”,不然會(huì)警告。

15. nrows

nrows 參數(shù)設(shè)置一次性讀入的文件行數(shù),它在讀入大文件時(shí)很有用,比如 16G 內(nèi)存的PC無(wú)法容納幾百 G 的大文件。

pd.read_csv(file_path,encoding='gbk',nrows=4)

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

很多時(shí)候我們只是想看看大文件內(nèi)部的字段長(zhǎng)什么樣子,所以這里通過(guò)nrows指定讀取的行數(shù)。

16. na_values

na_values 參數(shù)可以配置哪些值需要處理成 NaN,這個(gè)是非常常用的。

pd.read_csv(file_path,encoding='gbk',na_values=['馬里奧','戰(zhàn)神'])

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

我們看到將 &lsquo;馬里奧&rsquo; 和 &lsquo;戰(zhàn)神&rsquo; 設(shè)置成了NaN,當(dāng)然我們這里不同的列,里面包含的值都是不相同的。但如果兩個(gè)列中包含相同的值,而我們只想將其中一個(gè)列的值換成NaN該怎么做呢?通過(guò)字典實(shí)現(xiàn)只對(duì)指定的列進(jìn)行替換。以下的例子可以看到,戰(zhàn)神并沒(méi)有被替換成NaN, 因?yàn)樵诮巧餂](méi)有這個(gè)值;/

pd.read_csv(file_path,encoding='gbk',na_values={<!--{cke_protected}{C}%3C!%2D%2D%20%2D%2D%3E-->"角色":['馬里奧','戰(zhàn)神'],'編號(hào)':[2]})

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

17. keep_default_na

我們知道,通過(guò) na_values 參數(shù)可以讓 pandas 在讀取 CSV 的時(shí)候?qū)⒁恍┲付ǖ闹堤鎿Q成空值,但除了 na_values 指定的值之外,還有一些默認(rèn)的值也會(huì)在讀取的時(shí)候被替換成空值,這些值有: “-1.#IND”、“1.#QNAN”、“1.#IND”、“-1.#QNAN”、“#N/A N/A”、“#N/A”、“N/A”、“NA”、“#NA”、“NULL”、“NaN”、“-NaN”、“nan”、“-nan”、“” 。盡管這些值在 CSV 中的表現(xiàn)形式是字符串,但是 pandas 在讀取的時(shí)候會(huì)替換成空值(真正意義上的 NaN)。不過(guò)有些時(shí)候我們不希望這么做,比如有一個(gè)具有業(yè)務(wù)含義的字符串恰好就叫 “NA”,那么再將它替換成空值就不對(duì)了。

這個(gè)時(shí)候就可以將 keep_default_na 指定為 False,默認(rèn)為 True,如果指定為 False,那么 pandas 在讀取時(shí)就不會(huì)擅自將那些默認(rèn)的值轉(zhuǎn)成空值了,它們?cè)?CSV 中長(zhǎng)什么樣,pandas 讀取出來(lái)之后就還長(zhǎng)什么樣,即使單元格中啥也沒(méi)有,那么得到的也是一個(gè)空字符串。但是注意,我們上面介紹的 na_values 參數(shù)則不受此影響,也就是說(shuō)即便 keep_default_na 為 False,na_values 參數(shù)指定的值也依舊會(huì)被替換成空值。舉個(gè)栗子,假設(shè)某個(gè) CSV 中存在 “NULL”、“NA”、以及空字符串,那么默認(rèn)情況下,它們都會(huì)被替換成空值。但 “NA” 是具有業(yè)務(wù)含義的,我們希望保留原樣,而 “NULL” 和空字符串,我們還是希望 pandas 在讀取的時(shí)候能夠替換成空值,那么此時(shí)就可以在指定 keep_default_na 為 False 的同時(shí),再指定 na_values 為 ["NULL", ""]

18. na_filter

是否進(jìn)行空值檢測(cè),默認(rèn)為 True,如果指定為 False,那么 pandas 在讀取 CSV 的時(shí)候不會(huì)進(jìn)行任何空值的判斷和檢測(cè),所有的值都會(huì)保留原樣。因此,如果你能確保一個(gè) CSV 肯定沒(méi)有空值,則不妨指定 na_filter 為 False,因?yàn)楸苊饬丝罩禉z測(cè),可以提高大型文件的讀取速度。另外,該參數(shù)會(huì)屏蔽 keep_default_na 和 na_values,也就是說(shuō),當(dāng) na_filter 為 False 的時(shí)候,這兩個(gè)參數(shù)會(huì)失效。

從效果上來(lái)說(shuō),na_filter 為 False 等價(jià)于:不指定 na_values、以及將 keep_default_na 設(shè)為 False。

19. skip_blank_lines

skip_blank_lines 默認(rèn)為 True,表示過(guò)濾掉空行,如為 False 則解析為 NaN。

20. parse_dates

指定某些列為時(shí)間類型,這個(gè)參數(shù)一般搭配下面的date_parser使用。

21. date_parser

是用來(lái)配合parse_dates參數(shù)的,因?yàn)橛械牧须m然是日期,但沒(méi)辦法直接轉(zhuǎn)化,需要我們指定一個(gè)解析格式:

from datetime import datetime
pd.read_csv(file_path,encoding='gbk',parse_dates=['發(fā)行日'],date_parser=lambda x:datetime.strptime(x,'%Y/%m/%d'))

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

22. infer_datetime_format

infer_datetime_format 參數(shù)默認(rèn)為 False。如果設(shè)定為 True 并且 parse_dates 可用,那么 pandas 將嘗試轉(zhuǎn)換為日期類型,如果可以轉(zhuǎn)換,轉(zhuǎn)換方法并解析,在某些情況下會(huì)快 5~10 倍。

23. iterator

iterator 為 bool類型,默認(rèn)為False。如果為True,那么返回一個(gè) TextFileReader 對(duì)象,以便逐塊處理文件。這個(gè)在文件很大、內(nèi)存無(wú)法容納所有數(shù)據(jù)文件時(shí),可以分批讀入,依次處理。

df=pd.read_csv(file_path,encoding='gbk',iterator=True)
display(df.get_chunk(2))

"""
	編號(hào)	角色	源于	發(fā)行日
0	1	馬里奧	超級(jí)馬里奧:奧德賽	2017/10/27
1	2	林克	塞爾達(dá)傳說(shuō):荒野之息	2017/3/3
"""

print(chunk.get_chunk(1))
"""
編號(hào)	角色	源于	發(fā)行日
2	3	奎托斯	戰(zhàn)神	2018/4/20
"""

# 文件還剩下三行,但是我們指定讀取10,那么也不會(huì)報(bào)錯(cuò),不夠指定的行數(shù),那么有多少返回多少
print(chunk.get_chunk(10))
"""
編號(hào)	角色	源于	發(fā)行日
3	4	褪色者	埃爾登法環(huán)	2022/2/25
4	5	葦名弦一羊	只狼	2019/3/22
"""

try:
    # 但是在讀取完畢之后,再讀的話就會(huì)報(bào)錯(cuò)了
    chunk.get_chunk(5)
except StopIteration as e:
    print("讀取完畢")
# 讀取完畢

24. chunksize

chunksize 整型,默認(rèn)為 None,設(shè)置文件塊的大小。

chunk = pd.read_csv(file_path, sep="\t", chunksize=2)
# 還是返回一個(gè)類似于迭代器的對(duì)象
# 調(diào)用get_chunk,如果不指定行數(shù),那么就是默認(rèn)的chunksize
print(chunk.get_chunk())
"""
編號(hào)	角色	源于	發(fā)行日
0	1	馬里奧	超級(jí)馬里奧:奧德賽	2017/10/27
1	2	林克	塞爾達(dá)傳說(shuō):荒野之息	2017/3/3
"""

# 但也可以指定
print(chunk.get_chunk(100))
"""
編號(hào)	角色	源于	發(fā)行日
2	3	奎托斯	戰(zhàn)神	2018/4/20
3	4	褪色者	埃爾登法環(huán)	2022/2/25
4	5	葦名弦一羊	只狼	2019/3/22
"""

try:
    chunk.get_chunk(5)
except StopIteration as e:
    print("讀取完畢")
# 讀取完畢

25. compression

compression 參數(shù)取值為 {&lsquo;infer&rsquo;, &lsquo;gzip&rsquo;, &lsquo;bz2&rsquo;, &lsquo;zip&rsquo;, &lsquo;xz&rsquo;, None},默認(rèn) &lsquo;infer&rsquo;,這個(gè)參數(shù)直接支持我們使用磁盤(pán)上的壓縮文件。

# 直接將上面的.csv添加到壓縮文件,打包成game_data.zip
pd.read_csv('game_data.zip', compression="zip",encoding='gbk')

26. thousands

千分位分割符,如 , 或者 .,默認(rèn)為None。

27. encoding

encoding 指定字符集類型,通常指定為 &lsquo;utf-8&rsquo;。根據(jù)情況也可能是&rsquo;ISO-8859-1&rsquo;,本文中所有的encoding='gbk' ,主要原因?yàn)椋何业臄?shù)據(jù)是用Excel 保存成.CSV的,默認(rèn)的編碼格式為GBK;

28. error_bad_lines和warn_bad_lines

如果一行包含過(guò)多的列,假設(shè)csv的數(shù)據(jù)有5列,但是某一行卻有6個(gè)數(shù)據(jù),顯然數(shù)據(jù)有問(wèn)題。那么默認(rèn)情況下不會(huì)返回DataFrame,而是會(huì)報(bào)錯(cuò)。

我們?cè)谀骋恍兄卸嗉恿艘粋€(gè)數(shù)據(jù),結(jié)果顯示錯(cuò)誤。因?yàn)間irl.csv里面有5列,但是有一行卻有6個(gè)數(shù)據(jù),所以報(bào)錯(cuò)。

在小樣本讀取時(shí),這個(gè)錯(cuò)誤很快就能發(fā)現(xiàn)。但是如果樣本比較大、并且由于數(shù)據(jù)集不可能那么干凈,會(huì)很容易出現(xiàn)這種情況,那么該怎么辦呢?而且這種情況下,Excel基本上是打不開(kāi)這么大的文件的。這個(gè)時(shí)候我們就可以將error_bad_lines設(shè)置為False(默認(rèn)為True),意思是遇到這種情況,直接把這一行給我扔掉。同時(shí)會(huì)設(shè)置 warn_bad_lines 設(shè)置為True,打印剔除的這行。

pd.read_csv(file_path,encoding='gbk',error_bad_lines=False, warn_bad_lines=True)

怎么使用Pandas進(jìn)行數(shù)據(jù)讀取

以上兩參數(shù)只能在C解析引擎下使用。

讀到這里,這篇“怎么使用Pandas進(jìn)行數(shù)據(jù)讀取”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI