Pandas 讀寫csv文件

2022-07-15 11:28 更新

在《Python Pandas讀取文件》中,我們講解了多種用 Pandas 讀寫文件的方法。本節(jié)我們講解如何應(yīng)用這些方法 。

我們知道,文件的讀寫操作屬于計(jì)算機(jī)的 IO 操作,Pandas IO 操作提供了一些讀取器函數(shù),比如 pd.read_csv()、pd.read_json 等,它們都返回一個(gè) Pandas 對(duì)象。

在 Pandas 中用于讀取文本的函數(shù)有兩個(gè),分別是: read_csv() 和 read_table() ,它們能夠自動(dòng)地將表格數(shù)據(jù)轉(zhuǎn)換為 DataFrame 對(duì)象。其中 read_csv 的語(yǔ)法格式,如下:

pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)

下面,新建一個(gè) txt 文件,并添加以下數(shù)據(jù):

ID,Name,Age,City,Salary
1,Jack,28,Beijing,22000
2,Lida,32,Shanghai,19000
3,John,43,Shenzhen,12000
4,Helen,38,Hengshui,3500

將 txt 文件另存為 person.csv 文件格式,直接修改文件擴(kuò)展名即可。接下來,對(duì)此文件進(jìn)行操作。

read_csv()

read_csv() 表示從 CSV 文件中讀取數(shù)據(jù),并創(chuàng)建 DataFrame 對(duì)象。

import pandas as pd
#需要注意文件的路徑
df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv")
print (df)

輸出結(jié)果:

   ID   Name  Age      City  Salary
0   1   Jack   28   Beijing   22000
1   2   Lida   32  Shanghai   19000
2   3   John   43  Shenzhen   12000
3   4  Helen   38  Hengshui    3500

1) 自定義索引

在 CSV 文件中指定了一個(gè)列,然后使用index_col可以實(shí)現(xiàn)自定義索引。

import pandas as pd
df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",index_col=['ID'])
print(df)

輸出結(jié)果:

     Name  Age      City  Salary
ID                             
1    Jack   28   Beijing   22000
2    Lida   32  Shanghai   19000
3    John   43  Shenzhen   12000
4   Helen   38  Hengshui    3500

2) 查看每一列的dtype

import pandas as pd
#轉(zhuǎn)換salary為float類型
df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",dtype={'Salary':np.float64})
print(df.dtypes)

輸出結(jié)果:

ID          int64
Name       object
Age         int64
City       object
Salary    float64
dtype: object

注意:默認(rèn)情況下,Salary 列的 dtype 是 int 類型,但結(jié)果顯示其為 float 類型,因?yàn)槲覀円呀?jīng)在上述代碼中做了類型轉(zhuǎn)換。

3) 更改文件標(biāo)頭名

使用 names 參數(shù)可以指定頭文件的名稱。

import pandas as pd
df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",names=['a','b','c','d','e'])
print(df)

輸出結(jié)果:

    a      b    c         d       e
0  ID   Name  Age      City  Salary
1   1   Jack   28   Beijing   22000
2   2   Lida   32  Shanghai   19000
3   3   John   43  Shenzhen   12000
4   4  Helen   38  Hengshui    3500

注意:文件標(biāo)頭名是附加的自定義名稱,但是您會(huì)發(fā)現(xiàn),原來的標(biāo)頭名(列標(biāo)簽名)并沒有被刪除,此時(shí)您可以使用?header?參數(shù)來刪除它。

通過傳遞標(biāo)頭所在行號(hào)實(shí)現(xiàn)刪除,如下所示:

import pandas as pd
df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",names=['a','b','c','d','e'],header=0)
print(df)

輸出結(jié)果:

   a      b   c         d      e
0  1   Jack  28   Beijing  22000
1  2   Lida  32  Shanghai  19000
2  3   John  43  Shenzhen  12000
3  4  Helen  38  Hengshui   3500

假如原標(biāo)頭名并沒有定義在第一行,您也可以傳遞相應(yīng)的行號(hào)來刪除它。

4) 跳過指定的行數(shù)

?skiprows??參數(shù)表示跳過指定的行數(shù)。

import pandas as pd
df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",skiprows=2)
print(df)

輸出結(jié)果:

   2   Lida  32  Shanghai  19000
0  3   John  43  Shenzhen  12000
1  4  Helen  38  Hengshui   3500

注意:包含標(biāo)頭所在行。

to_csv()

Pandas 提供的 to_csv() 函數(shù)用于將 DataFrame 轉(zhuǎn)換為 CSV 數(shù)據(jù)。如果想要把 CSV 數(shù)據(jù)寫入文件,只需向函數(shù)傳遞一個(gè)文件對(duì)象即可。否則,CSV 數(shù)據(jù)將以字符串格式返回。

下面看一組簡(jiǎn)單的示例:

import pandas as pd 
data = {'Name': ['Smith', 'Parker'], 'ID': [101, 102], 'Language': ['Python', 'JavaScript']} 
info = pd.DataFrame(data) 
print('DataFrame Values:\n', info) 
#轉(zhuǎn)換為csv數(shù)據(jù)
csv_data = info.to_csv() 
print('\nCSV String Values:\n', csv_data)  

輸出結(jié)果:

DataFrame:
      Name   ID    Language
0   Smith  101      Python
1  Parker  102  JavaScript

csv數(shù)據(jù):
,Name,ID,Language
0,Smith,101,Python
1,Parker,102,JavaScript

指定 CSV 文件輸出時(shí)的分隔符,并將其保存在 pandas.csv 文件中,代碼如下:

import pandas as pd
#注意:pd.NaT表示null缺失數(shù)據(jù)
data = {'Name': ['Smith', 'Parker'], 'ID': [101, pd.NaT], 'Language': ['Python', 'JavaScript']}
info = pd.DataFrame(data)
csv_data = info.to_csv("C:/Users/Administrator/Desktop/pandas.csv",sep='|')



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)