一、简介
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: {} ".format(series1))
series1: 0 1 1 2 2 3 3 4 dtype: int64 #此行表示数据的类型为int64,输出中第一行是index,第二行是value
我们可以分别打印出Series中的数据和索引:
# data_structure.py print("series1.values: {} ".format(series1.values)) print("series1.index: {} ".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: {} ".format(series2)) print("E is {} ".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: {} ".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: {} ".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: {} ".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: {} ".format(df3)) del df3["weekday"] print("df3: {} ".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: {} ".format(df3.loc[[0, 1], "note"])) #访问行索引是0和1,列索引是note的元素 print("Note C, D is: {} ".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