目录
一,pandas简介:
pandas是Python的一个第三方开源库,是Python数据分析的必备高级工具,Pandas 这个名字来源于面板数据(Panel Data)与数据分析(data analysis)这两个名词的组合。在经济学中,Panel Data 是一个关于多维数据集的术语。Pandas 最初被应用于金融量化交易领域,现在它的应用领域更加广泛,涵盖了农业、工业、交通等许多行业。
二,pandas数据结构Series简介:
Series是一个一维标记数组,能够保存任何数据类型(整数,字符串,浮点数,Python对象等)。创建它的基本方法是调用Series
首先我们先导入pandas
import numpy as np
import pandas as pd
s = pd.Series(data, index=index)
这里data可以有很多不同的东西:
python字典
一个ndarray
标量值(如 5)
传递的索引是轴标签的列表,因此根据数据是什么,分为几种情况:
2.1 data为ndarray
如果 data 是 ndarray,则索引必须与数据长度相同。如果没有传递索引,则会创建一个具有 value 的索引。[0,..,len(data)-1]
这里我们先给出index
s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"])
a 0.469112
b -0.282863
c -1.509059
d -1.135632
e 1.212112
dtype: float64
s.index
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
下面我们不给index
pd.Series(np.random.randn(5))
0 -0.173215
1 0.119209
2 -1.044236
3 -0.861849
4 -2.104569
dtype: float64
可以看到Python自动生成了一个索引
2.2 data为字典
Series可以从字典实例化:
d = {"b": 1, "a": 0, "c": 2}
b 1
a 0
c 2
dtype: int64
如果传递了索引,则将拉出索引中标签对应的数据中的值
d = {"a": 0.0, "b": 1.0, "c": 2.0}
pd.Series(d)
pd.Series(d, index=["b", "c", "d", "a"])
a 0.0
b 1.0
c 2.0
dtype: float64
b 1.0
c 2.0
d NaN
a 0.0
dtype: float64
注意:NaN不是数字是pandas中使用的标准缺失数据标记
三,Serise切片操作:
Series与ndarray非常相似,并且是大多数Numpy函数的有效参数,Series也能对索引进行切片操作。
s[0]
0.4691122999071863
s[:3]
a 0.469112
b -0.282863
c -1.509059
dtype: float64
s[s > s.median()]
a 0.469112
e 1.212112
dtype: float64
s[[4, 3, 1]]
e 1.212112
d -1.135632
b -0.282863
dtype: float64
四,Series性质:
4.1 Series类似于numpy,字典
与numpy数组一样,pandas的Series也有一个dtype
s.dtype
dtype('float64')
这通常是NumPy dtype。然而,pandas和第3方库在几个地方扩展了NumPy的类型系统,在这种情况下,dtype将是ExtensionDtype.pandas中的一些示例是分类数据和可为空整数数据类型。
Series也类似于固定大小的字典,可以通过索引标签获取和设置值:
s["a"]
s["e"] = 12.0
"e" in s
"f" in s
0.4691122999071863
a 0.469112
b -0.282863
c -1.509059
d -1.135632
e 12.000000
dtype: float64
True
False
如果索引中不包含标签则会引发异常。
使用Series.get()方法,丢失的标签将返回None或指定的默认值:
s.get("f", np.nan)
nan
4.2 矢量化操作和标签对齐系列:
使用原始Numpy数组时间,通常不需要逐值循环,在panda中使用Series时间也是如此,Series可以传递到大多数需要ndarray的Numpy方法中
s + s
s * 2
np.exp(s)
a 0.938225
b -0.565727
c -3.018117
d -2.271265
e 24.000000
dtype: float64
a 0.938225
b -0.565727
c -3.018117
d -2.271265
e 24.000000
dtype: float64
a 1.598575
b 0.753623
c 0.221118
d 0.321219
e 162754.791419
dtype: float64
Series和ndarray之间的一个关键区别是,Series会根据标签自动对齐数据,因此,在编写计算时无需烤炉Series的标签是否相同。
s[1:] + s[:-1]
a NaN
b -0.565727
c -3.018117
d -2.271265
e NaN
dtype: float64
未对齐之间的运算结果Series将包含所涉及索引的并集。Series如果在其中一个或另一个中找不到标签,结果将被标记为丢失NaN。能够在不进行任何显式数据对齐的情况下编写代码,为交互式数据分析和研究提供了巨大的自由度和灵活性。pandas数据结构的集成数据对齐功能使pandas与大多数处理标记数据的相关工具区分开来。
注意:一般来说,我们选择使不同索引对象之间的操作的默认结果产生索引的并集,以避免信息丢失。尽管缺少数据,但拥有索引标签通常是计算过程中的重要信息。您当然可以选择通过dropna函数删除丢失数据的标签。
4.3 name属性:
Series还有一个name属性:
s = pd.Series(np.random.randn(5), name="something")
s.name
0 -0.494929
1 1.071804
2 0.721555
3 -0.706771
4 -1.039575
Name: something, dtype: float64
'something'
另外还能又pandas.Series.rename()来重命名
s2 = s.rename("different")
s2.name
'different'
4.4,基本属性
属性 | 用途 |
s.shape | 查看数据行列 |
s.ndim | 查看维度,Series 是一维,ndim 恒等于1 |
s.size | 查看数据总数 |
s.index | 查看索引 |
s.values | 查看数据值 |
s.name | 查看 Series 对象的 name,若未设定则为空 |
(1)
s = pd.Series(np.random.randint(1,10,size=(10,)))
s.head() # 默认是前五行数据,可自定义行数,比如想要十行的话,s.head(10)
(2)isnull(),notnull()函数检测缺失数据
创建一个测试集
obj = Series([10,4,np.nan])
使用notnull查看
notnull = pd.notnull(obj)
根据isnull()返回的结果,取不为空的数据
obj[notnull]