什么是pandas
pandas是python的一个数据分析包,是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。 Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。
panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。
简言之,pandas是基于NumPy的,两者是数据分析强大的工具。
pandas安装
pandas安装指令:
pip install pandas
pandas中数据结构Series和DataFrame
pandas中主要有两种数据结构,分别是:Series和DataFrame。
Series
Series:一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。
创建Series对象,用到pandas中的Series()。
通过一维数组创建Series对象
创建数据是一维数组,也可以是字典。前面一文NumPy详解中,已详细学习了NumPy一维数组的各种创建,此处不再赘述。我们只需把创建好的一维数组数据传递过来即可。示例如下:
import pandas as pd
import numpy as np
# Series
# 通过随机数创建numpy数组
arr = np.random.randn(6)
s1 = pd.Series(arr)
print(s1)
print("-" * 20)
# 通过arange()创建numpy数组
arr2 = np.arange(6)
s2 = pd.Series(arr2)
print(s2)
print("-" * 20)
# 通过ones创建numpy的全1数组
arr3 = np.ones(6)
s3 = pd.Series(arr3)
print(s3)
print("-" * 20)
# 通过zeros创建numpy的全零数组
arr4 = np.zeros(6)
s4 = pd.Series(arr4)
print(s4)
运行结果:
0 -1.205245
1 -0.671404
2 -0.056164
3 -0.090229
4 1.004950
5 -1.139511
dtype: float64
--------------------
0 0
1 1
2 2
3 3
4 4
5 5
dtype: int32
--------------------
0 1.0
1 1.0
2 1.0
3 1.0
4 1.0
5 1.0
dtype: float64
--------------------
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
5 0.0
dtype: float64
说明:
上面例子中,我们在创建Series对象,只提供了数据源,并没有提供索引。此时索引默认是从0开始的数字,依次排序。当然,我们也可以在创建的时候,指定索引:
import pandas as pd
import numpy as np
# Series
# 创建的时候,指定索引
arr = np.random.randn(6)
s5 = pd.Series(arr, index=["一月", "二月", "三月", "四月", "五月", "六月"])
print(s5)
运行结果:
一月 0.088578
二月 0.347118
三月 -1.080161
四月 -0.937341
五月 1.216052
六月 0.646635
dtype: float64
通过字典创建Series对象
上面例子中,我们在创建Series对象,数据源是一维数组,当然我们也可以传入字典来创建Series对象。字典的key就是要生成Series的索引了。
import pandas as pd
# Series
dict_data = {"一月": 11, "二月": 13, "三月": 10, "四月": 14, "五月": 8, "六月": 10}
# 通过字典创建Series对象
s3 = pd.Series(dict_data)
print(s3)
运行结果:
一月 11
二月 13
三月 10
四月 14
五月 8
六月 10
dtype: int64
取值
我们从Series数据结构中取值,可以利用自定义的索引标签,也可以利用默认的位置索引。上面例子中可以这样取值:
# 上接
# 通过标签取值
print(s3["一月"])
# 通过默认的索引序列取值
print(s3[0])
运行结果:
11
11
Series一维数据结构很简单,我们重点去学习二维数据结构DataFrame。
注意:Series中的索引值是可以重复的。
DataFrame
DataFrame:一个二维表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。
DataFrame对象的创建,要用到pandas 中的DataFrame()。需要传入的参数,数据源可以是二维数组,也可以是字典。除此之外,创建的同时也可以指定行索引,列索引。如果不指定索引,将使用默认的索引,从0开始的依次递增的序列号。
import pandas as pd
import numpy as np
# DataFrame
# 利用numpy创建二维数据
arr = np.random.randn(20).reshape((4, 5))
# 利用pandas创建DataFrame对象
df = pd.DataFrame(arr)
print(df)
运行结果:
0 1 2 3 4
0 -1.719292 0.437608 0.512311 -0.658363 -0.114165
1 -0.730688 1.887302 0.495906 0.109294 0.484358
2 2.716056 -2.124497 -0.406951 1.396759 1.621959
3 1.923468 -0.129051 0.218899 2.427141 0.781985
我们可以在创建的同时,可以指定行索引、列索引。示例如下:
import pandas as pd
import numpy as np
# DataFrame
# 利用numpy创建二维数据
arr = np.random.randn(20).reshape((4, 5))
# 行索引
index = ["Q1", "Q2", "Q3", "Q4"]
# 列索引
columns = ["A", "B", "C", "D", "E"]
# 利用pandas创建DataFrame对象
df = pd.DataFrame(arr, index=index, columns=columns)
print(df)
运行结果:
A B C D E
Q1 0.064423 1.633352 -1.705736 1.305984 0.001379
Q2 0.445133 0.452308 1.659449 -0.800272 0.986402
Q3 -0.024076 1.090810 -0.627166 -0.312072 0.242472
Q4 -2.754748 -0.757759 0.689985 -0.001170 -0.136409
常见属性
我们可以获取行索引df.index、列索引df.columns、数据值df.values、数据描述df.describe(),示例如下:
import pandas as pd
import numpy as np
# DataFrame
# 利用numpy创建二维数据
arr = np.random.randn(20).reshape((4, 5))
# 行索引
index = ["Q1", "Q2", "Q3", "Q4"]
# 列索引
columns = ["A", "B", "C", "D", "E"]
# 利用pandas创建DataFrame对象
df = pd.DataFrame(arr, index=index, columns=columns)
print(df)
print("-" * 50)
# 行索引
print(df.index)
# 列索引
print(df.columns)
print("-" * 50)
# 数据值
print(df.values)
print("-" * 50)
# 数据描述信息
print(df.describe())
运行结果:
A B C D E
Q1 0.752826 -1.355122 0.035948 0.839446 0.635179
Q2 -0.496016 -0.322719 0.885232 0.247262 -0.906780
Q3 0.845926 1.073606 0.233991 -0.236160 0.147905
Q4 0.030459 1.391417 -0.346198 1.991587 -0.303235
--------------------------------------------------
Index(['Q1', 'Q2', 'Q3', 'Q4'], dtype='object')
Index(['A', 'B', &