一、簡介
pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標准的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法,pandas為時間序列分析提供了很好的支持。
二、數據結構
- Series:一維數組,與Numpy中的一維array類似。二者與Python基本的數據結構List也很相近,其區別是:List中的元素可以是不同的數據類型,而Array和Series中則只允許存儲相同的數據類型,這樣可以更有效的使用內存,提高運算效率。
- Time- Series:以時間為索引的Series。
- DataFrame:二維的表格型數據結構。很多功能與R中的data.frame類似。可以將DataFrame理解為Series的容器。以下的內容主要以DataFrame為主。
- Panel :三維的數組,可以理解為DataFrame的容器。
Series 和 DataFramePandas自己獨有的基本數據結構。應該注意,它固然有着兩種數據結構,因為它依然是 Python 的一個庫,所以,Python 中有的數據類型在這里依然適用,也同樣還可以使用類自己定義數據類型。
三、使用
1、series
# data_structure.py import pandas as pd import numpy as np series1 = pd.Series([1, 2, 3, 4]) print("series1:\n{}\n".format(series1))
series1: 0 1 1 2 2 3 3 4 dtype: int64 #此行表示數據的類型為int64,輸出中第一行是index,第二行是value
我們可以分別打印出Series中的數據和索引:
# data_structure.py print("series1.values: {}\n".format(series1.values)) print("series1.index: {}\n".format(series1.index))
series1.values: [1 2 3 4] #默認的index是從0開始的數字形式
series1.index: RangeIndex(start=0, stop=4, step=1)
索引可以是任何數據類型,例如字符串:
# data_structure.py series2 = pd.Series([1, 2, 3, 4, 5, 6, 7], index=["C", "D", "E", "F", "G", "A", "B"]) print("series2:\n{}\n".format(series2)) print("E is {}\n".format(series2["E"]))
series2: C 1 D 2 E 3 F 4 G 5 A 6 B 7 dtype: int64 E is 3
2、DataFrame
不指定數據內容,創建一個4*4的DataFrame:
# data_structure.py df1 = pd.DataFrame(np.arange(16).reshape(4,4)) print("df1:\n{}\n".format(df1))
輸出如下(列叫做column,行叫做index,都是從0開始的整數):
df1: 0 1 2 3 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11 3 12 13 14 15
指定column和index來創建DataFrame:
# data_structure.py df2 = pd.DataFrame(np.arange(16).reshape(4,4), columns=["column1", "column2", "column3", "column4"], index=["a", "b", "c", "d"]) print("df2:\n{}\n".format(df2))
結果如下:
df2: column1 column2 column3 column4 a 0 1 2 3 b 4 5 6 7 c 8 9 10 11 d 12 13 14 15
指定數據列創建DataFrame:
# data_structure.py df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"], "weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]}) print("df3:\n{}\n".format(df3))
結果如下(DataFrame的不同列可以是不同的數據類型):
df3: note weekday 0 C Mon 1 D Tue 2 E Wed 3 F Thu 4 G Fri 5 A Sat 6 B Sun
添加或者刪除列:
# data_structure.py df3["No."] = pd.Series([1, 2, 3, 4, 5, 6, 7]) print("df3:\n{}\n".format(df3)) del df3["weekday"] print("df3:\n{}\n".format(df3))
結果如下:
df3: note weekday No. 0 C Mon 1 1 D Tue 2 2 E Wed 3 3 F Thu 4 4 G Fri 5 5 A Sat 6 6 B Sun 7 df3: note No. 0 C 1 1 D 2 2 E 3 3 F 4 4 G 5 5 A 6 6 B 7
3、Index對象與數據訪問

loc:通過行和列的索引來訪問數據(定義時的索引)。df.ioc[1:3,1:5],取出第2行至第3行的第2列至第5列的數據。注意不包括第3行,第5列。df.iloc[[1,2],[2,3]]取出第2行和第3行的第3列和第4列數據。iloc:通過行和列的下標來訪問數據(從0到N-1的整數,是指行和列的位置)。df.ioc[“a”:“f”,“A”:“C”],取出a行至f行的A列至C列的數據。注意包括f行和C列。df.iloc[[”a“,”b“],[A”“,”B“]]取出a行和b行的A列和B列數據。
# data_structure.py print("Note C, D is:\n{}\n".format(df3.loc[[0, 1], "note"])) #訪問行索引是0和1,列索引是note的元素 print("Note C, D is:\n{}\n".format(df3.iloc[[0, 1], 0])) #訪問行下標是0和1,列下標是0的元素
結果如下(對於df3來說,行下標和行索引是一樣的):
Note C, D is: 0 C 1 D Name: note, dtype: object Note C, D is: 0 C 1 D Name: note, dtype: object
