當使用 Pandas 做數據分析的時,需要讀取事先准備好的數據集,這是做數據分析的第一步。Panda 提供了多種讀取數據的方法:
- read_csv() 用於讀取文本文件
- read_json() 用於讀取 json 文件
- read_sql_query() 讀取 sql 語句的,
本節將對上述方法做詳細介紹。
CSV文件讀取
CSV 又稱逗號分隔值文件,是一種簡單的文件格式,以特定的結構來排列表格數據。 CSV 文件能夠以純文本形式存儲表格數據,比如電子表格、數據庫文件,並具有數據交換的通用格式。CSV 文件會在 Excel 文件中被打開,其行和列都定義了標准的數據格式。
將 CSV 中的數據轉換為 DataFrame 對象是非常便捷的。和一般文件讀寫不一樣,它不需要你做打開文件、讀取文件、關閉文件等操作。相反,您只需要一行代碼就可以完成上述所有步驟,並將數據存儲在 DataFrame 中。
下面進行實例演示,首先您需要創建一組數據,並將其保存為 CSV 格式,數據如下:
Name,Hire Date,Salary,Leaves Remaining John Idle,08/15/14,50000.00,10 Smith Gilliam,04/07/15,65000.00,6 Parker Chapman,02/21/14,45000.00,7 Jones Palin,10/14/13,70000.00,3 Terry Gilliam,07/22/14,48000.00,9 Michael Palin,06/28/13,66000.00,8
注意:將上述數據保存到.txt
的文本文件中,然后將文件的擴展名后綴修改為 csv,即可完成 csv 文件的創建。
接下來,我們使用下列代碼讀寫數據:
- import pandas
- #僅僅一行代碼就完成了數據讀取,但是注意文件路徑不要寫錯
- df = pandas.read_csv('C:/Users/Administrator/Desktop/hrd.csv')
- print(df)
輸出結果:
Name Hire Date Salary Leaves Remaining 0 John Idle 08/15/14 50000.0 10 1 Smith Gilliam 04/07/15 65000.0 6 2 Parker Chapman 02/21/14 45000.0 7 3 Jones Palin 10/14/13 70000.0 3 4 Terry Gilliam 07/22/14 48000.0 9 5 Michael Palin 06/28/13 66000.0 8
在下一節會對 read_csv() 函數做詳細講解。
json讀取文件
您可以通過下列方法來讀取一個 json 文件,如下所示:
- import pandas as pd
- data = pd.read_json('C:/Users/Administrator/Desktop/hrd.json')
- print(data)
輸出結果:
Name Hire Date Salary Leaves Remaining 0 John Idle 08/15/14 50000.0 10 1 Smith Gilliam 04/07/15 65000.0 6 2 Parker Chapman 02/21/14 45000.0 7 3 Jones Palin 10/14/13 70000.0 3 4 Terry Gilliam 07/22/14 48000.0 9 5 Michael Palin 06/28/13 66000.0 8
SQL數據庫讀取
如果想要從 SQL 數據庫讀取數據,首先您應該使用 Python 和數據庫建立連接,然后將查詢語句傳遞給 read_sql_query() 方法,下面做簡單地演示:
1) 安裝pysqlite3模塊
pip install pysqlite3
2) 建立數據連接
import sqlite3 con = sqlite3.connect("database.db")
3) 數據庫讀取數據
在 SQLite 數據庫中創建一張信息表,您可以隨意添加一些信息,最后使用下列方法讀取數據即可:
#con參數指定操作數據庫的引擎,可以指定,也可默認 df = pd.read_sql_query("SELECT * FROM information",con)
---------------------------------------------------------------
在《Python Pandas讀取文件》中,我們講解了多種用 Pandas 讀寫文件的方法。本節我們講解如何應用這些方法 。
我們知道,文件的讀寫操作屬於計算機的 IO 操作,Pandas IO 操作提供了一些讀取器函數,比如 pd.read_csv()、pd.read_json 等,它們都返回一個 Pandas 對象。
在 Pandas 中用於讀取文本的函數有兩個,分別是: read_csv() 和 read_table() ,它們能夠自動地將表格數據轉換為 DataFrame 對象。其中 read_csv 的語法格式,如下:
pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer',names=None, index_col=None, usecols=None)
下面,新建一個 txt 文件,並添加以下數據:
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 文件格式,直接修改文件擴展名即可。接下來,對此文件進行操作。
read_csv()
read_csv() 表示從 CSV 文件中讀取數據,並創建 DataFrame 對象。
- import pandas as pd
- #需要注意文件的路徑
- df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv")
- print (df)
輸出結果:
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 文件中指定了一個列,然后使用index_col
可以實現自定義索引。
- import pandas as pd
- df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",index_col=['ID'])
- print(df)
輸出結果:
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
- #轉換salary為float類型
- df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",dtype={'Salary':np.float64})
- print(df.dtypes)
輸出結果:
ID int64 Name object Age int64 City object Salary float64 dtype: object
注意:默認情況下,Salary 列的 dtype 是 int 類型,但結果顯示其為 float 類型,因為我們已經在上述代碼中做了類型轉換。
3) 更改文件標頭名
使用 names 參數可以指定頭文件的名稱。
- import pandas as pd
- df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",names=['a','b','c','d','e'])
- print(df)
輸出結果:
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
注意:文件標頭名是附加的自定義名稱,但是您會發現,原來的標頭名(列標簽名)並沒有被刪除,此時您可以使用header
參數來刪除它。
通過傳遞標頭所在行號實現刪除,如下所示:
- import pandas as pd
- df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",names=['a','b','c','d','e'],header=0)
- print(df)
輸出結果:
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
假如原標頭名並沒有定義在第一行,您也可以傳遞相應的行號來刪除它。
4) 跳過指定的行數
skiprows
參數表示跳過指定的行數。
- import pandas as pd
- df=pd.read_csv("C:/Users/Administrator/Desktop/person.csv",skiprows=2)
- print(df)
輸出結果:
2 Lida 32 Shanghai 19000 0 3 John 43 Shenzhen 12000 1 4 Helen 38 Hengshui 3500
注意:包含標頭所在行。
to_csv()
Pandas 提供的 to_csv() 函數用於將 DataFrame 轉換為 CSV 數據。如果想要把 CSV 數據寫入文件,只需向函數傳遞一個文件對象即可。否則,CSV 數據將以字符串格式返回。
下面看一組簡單的示例:
- import pandas as pd
- data = {'Name': ['Smith', 'Parker'], 'ID': [101, 102], 'Language': ['Python', 'JavaScript']}
- info = pd.DataFrame(data)
- print('DataFrame Values:\n', info)
- #轉換為csv數據
- csv_data = info.to_csv()
- print('\nCSV String Values:\n', csv_data)
輸出結果:
DataFrame: Name ID Language 0 Smith 101 Python 1 Parker 102 JavaScript csv數據: ,Name,ID,Language 0,Smith,101,Python 1,Parker,102,JavaScript
指定 CSV 文件輸出時的分隔符,並將其保存在 pandas.csv 文件中,代碼如下:
- import pandas as pd
- #注意:pd.NaT表示null缺失數據
- 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='|')