编程字典Pandas教程 http://codingdict.com/article/8270
清华计算机博士带你学-Python金融量化分析 https://www.bilibili.com/video/BV1i741147LS?t
Pandas是一个开源的Python库,使用其强大的数据结构提供高性能的数据处理和分析工具,是基于Numpy构建的。Pandas这个名字源自面板数据 - 来自多维数据的计量经济学。
2008年,开发人员Wes McKinney在需要高性能,灵活的数据分析工具时开始开发Pandas。
在Pandas之前,Python主要用于数据管理和准备。它对数据分析的贡献很小。Pandas解决了这个问题。使用Pandas,无论数据来源如何 - 加载,准备,操作,建模和分析,我们都可以完成数据处理和分析中的五个典型步骤。
Python与Pandas一起使用的领域广泛,包括学术和商业领域,包括金融,经济学,统计学,分析学等。
安装方法:
pip install pandas
引用方法:
import pandas as pd
Series是一种类似于一维数组的对象,是由一组数据和一组数据相关的数据标签(索引)组成的。
Pandas序列可以使用以下构造函数创建 -
pandas.Series( data, index, dtype, copy)
No | 参数 | 说明 |
---|---|---|
1 | data | 数据采用各种形式,如ndarray,列表,常量 |
2 | index | 索引值必须是唯一可散列的,与数据长度相同。如果没有索引被传递,则默认为 np.arrange(n) 。 |
3 | dtype | dtype用于数据类型。如果没有,则会推断数据类型 |
4 | copy | 复制数据。默认为False |
a = pd.Series([2,3,4,5],index=['a','b','c','d'])
print(a)
输出
a 2
b 3
c 4
d 5
dtype: int64
sr = pd.Series(np.arange(4),index=['a','b','c','d'])
输出
a 0
b 1
c 2
d 3
dtype: int32
sr = pd.Series({
'a':0,'b':1,'c':2,'d':3})
print(sr)
输出
a 0
b 1
c 2
d 3
dtype: int64
Series比较像列表(数组)和字典的结合体
属性或方法 | 描述 |
---|---|
axes() | 返回行轴标签的列表。 |
dtype() | 返回对象的dtype。 |
empty() | 如果series为空,则返回True。 |
ndim() | 根据定义1返回基础数据的维度数。 |
size() | 返回基础数据中元素的数量。 |
values() | 将该序列作为ndarray返回。 |
index() | 返回索引。 |
head() | 返回前n行。 |
tail() | 返回最后n行。 |
sr1 = pd.Series(np.arange(5),index=[list('abcde')])
print(sr1*2)
结果
a 0
b 2
c 4
d 6
e 8
dtype: int32
sr1 = pd.Series(np.arange(5),index=[list('abcde')])
sr2 = sr1.copy()
print(sr1+sr2+10)
结果
a 10
b 12
c 14
d 16
e 18
dtype: int32
a = pd.Series([2,3,4,5],index=['a','b','c','d'])
print(a['a']) #从标签索引
输出
2
和数组的操作一样
a = pd.Series([2,3,4,5],index=['a','b','c','d'])
print(a[0]) #从下标索引
输出
2
# 从字典创建Series
sr = pd.Series({
'a':0,'b':1,'c':2,'d':3})
print(sr['a']) #键索引
输出
0
# 从字典创建Series
sr = pd.Series({
'a':0,'b':1,'c':2,'d':3})
print(sr[[1,3]]) #下标花式索引
print(sr[['b','c']]) #标签花式索引
输出
b 1
d 3
dtype: int64
b 1
c 2
dtype: int64
# 从字典创建Series
sr = pd.Series({
'a':0,'b':1,'c':2,'d':3})
print(sr[sr>1]) #布尔值索引,找出所有大于1的元素
输出
c 2
d 3
dtype: int64
a = pd.Series([2,3,4,5],index=['a','b','c','d'])
b = a[1:3] #前包后不包
print(b)
输出
b 3
c 4
dtype: int64
a = pd.Series([2,3,4,5],index=['a','b','c','d'])
b = a['b':'d'] #前包后也包
print(b)
输出
b 3
c 4
d 5
dtype: int64
整数索引的pandas对象往往会使新手抓狂。Series的下标与标签可能产生冲突。
解决方法:使用loc属性和iloc属性
sr = pd.Series(np.arange(20))
sr2 = sr[10:].copy()
print(sr2.loc[10]) #这个10解释为标签
print(sr2.iloc[9]) #这个9解释为下标
a = np.arange(20)
print(a[-1]) #打印最后一个
输出
10
19
19
Pandas在进行两个Series对象的运算是,会按照索引进行对齐然后计算。
#Series数据对齐
sr1 = pd.Series([32,15,42],index=['a','b','c'])
sr2 = pd.Series([21,55,11],index=['c','a','b'])
sr3 = sr1+sr2
print(sr3)
输出
a 87
b 26
c 63
dtype: int64
两个Series不一样长的时候,仍然会按照索引进行对齐然后计算。但是遇到其中一个Series的标签有缺失时,会将这个标签的数据补充为NaN(Not a Number),作为Pandas中的数据缺失值,并且数据类型默认为浮点型。
#Series数据对齐
sr1 = pd.Series([32,15,42,10],index=['a','b','c','d'])
sr2 = pd.Series([21,55,11],index=['c','a','b'])
sr3 = sr1+sr2
print(sr3)
输出
a 87.0
b 26.0
c 63.0
d NaN
dtype: float64
让我们考虑一个产品的在线调查。很多时候,人们不会分享与他们有关的所有信息。很少有人分享他们的经验,但他们没有多久使用该产品; 很少有人分享他们使用产品的时间,他们的经验,但不是他们的联系信息。因此,以某种方式或其他方式,一部分数据总是会丢失,这在实时中非常普遍。让我们看看我们如何处理使用Pandas的缺失值(如NA或NaN)
相关方法:
方法 | 描述 |
---|---|
isnull | 判断是否为缺失值 |
notnull | 判断不是缺失值 |
fillna | 填充缺失值 |
dropna | 删除缺失值,含有axis 参数。默认情况下,axis = 0,即沿着行,这意味着如果行内的任何值为NA,则排除整行。 |
例子:
sr1 = pd.Series([32,15,42,10],index=['a','b','c','d'])
sr2 = pd.Series([21,55,11],index=['c','a','b'])
sr3 = sr1+sr2
print(sr3)
输出
a 87.0
b 26.0
c 63.0
d NaN
dtype: float64
print(sr3.notnull())
输出
a True
b True
c True
d False
dtype: bool
print(sr3.isnull())
输出
a False
b False
c False
d True
dtype: bool
print(sr3.dropna()) #扔掉所有NA
输出
a 87.0
b 26.0
c 63.0
dtype: float64
把NA填为0
print(sr3.fillna(0)) #把NA填为0
输出
a 87.0
b 26.0
c 63.0
d 0.0
dtype: float64
把NA填为平均值
print(sr3.fillna(sr3.mean())) #把NA填为平均值
输出
a 87.000000
b 26.000000
c 63.000000
d 58.666667
dtype: float64