帮助函数 S.method?
Pandas
1.什么是Series
简单来说:一维带标签(索引)的数组
2.Series的特征
- 数组中的数据可以是任意的类型,包括整数、浮点数、字符串、列表、字典等python对象
数组中的数据应为同一类型
创建Series
一般格式
s = pd.Series(data,index = index)
通过列表list创建Series
1
2
3
4import pandas as pd
import numpy as np
s = pd.Series([10,30,20,40])
si通过字典dictionary创建Series
1
2
3dict_1 = {"a":10,"c":5,"b":40}
s1 = pd.Series(dict_1)
s1
字典和Series的区别:
字典是无序的,Series是有序的,通过无序的字典来创建Series后,Series会将字典的键作为自己的索引,并且按升序方式排列
- 通过数组array创建Series
1
2
3array_1 = np.arange(10,16)
s2 = pd.Series(array_1,index=list("abcdef")) # 设置index
s2
Series的属性
- 获得索引index
1
2s2.index
Index(['a', 'b', 'c', 'd', 'e', 'f'], dtype='object')
索引为迭代器
- 通过赋值整体地修改索引值
1
2 s2.index = ["aa","bb","cc","dd","eee","fff"]
s2
要点:新设置的索引个数必须与原来索引个数一致
值得一提的是:提取单个索引值来修改是不允许的,如果要修改索引值,就得全部重新设置
修改index的名称
1
2s2.index.name = "banana"
s2修改Series的名称
1
s2.name = "length"
获取Series的值values
1
s2.values
通过以上我们发现,Series对象本身及其索引都有name属性
Series的索引 index
位置索引
1
2#得到第一行的数
s2[0]得到最后一行的数
1
s2[-1]
得到特定一些行的数(如第1行,第4行,第6行)
1
s2[[0,3,5]]
*名称索引1
2#得到索引为aa所对应的数
s2["aa"]
Series的切片slice
- 索引位置切片
1
s2[1:4]
没有包含末端
- 索引名称切片
1
s2["aa":"eee"]
包含末端
修改Series的值
1 | s2[index] = value (index表示需要修改的值所对应的索引) |
添加Series的值
- 返回一个新的Series,不修改原来的Series
1
s2.append(pd.Series([value1,value2,...],index = [index1,index2,...]))
1 | #添加Series的值,并返回一个新的Series |
- 直接在原来的基础上修改Series
1
s2["new index"] = value
- 通过
append
来添加Series的值,特点是:
- 返回一个新的Series
- 批量修改
- 通过
s2["new index"] = value
这种方式来添加的值,特点是:
- 直接在原来的Series基础上增加值
- 每次只能增加一个值
删除Series的值
del s2[index]
1
2#删除y索引对应的99这个值
del s2["y"]
过滤Series的值
通过布尔选择器(条件筛选)来过滤掉一些值,从而得到满足条件的值
1
2
3
4
5
6
7
8
9 s2[s2 < value]
s2[s2 > value]
s2[s2 == value]
s2[s2 != value]
#单条件筛选
s2[s2 > 90]
#多条件筛选
s2[(s2 > 50) | (s2 < 14)]
Series的缺失值处理
- 创建一个带有缺失值的Series
1
2# np.nan
s = pd.Series([10,np.nan,15,19,None])
提示:None值会被当做NA处理
*
- 判断是否有缺失值
isnull()
- 判断s中的缺失值
s.isnull()
- 如果需要取出这些缺失值,则通过布尔选择器来筛选出来
s[s.isnull()]
删除缺失值
1
2
3
4
5
6#dropna()会删除掉所有缺失值NaN,并返回一个新的Series
#原有的Series并未发生改变
s.dropna()
#如果希望原有的Series发生改变,
#可以将s.dropna()返回的新Series直接赋值给原来的Series
s = s.dropna()此外,我们也可以通过过滤的方式来达到一样的删除效果:
1
2
3
4
5
6
7
8
9data[~data.isnull()]
data[data.notnull()]
s = pd.Series([10,np.nan,15,19,None]) #初始化一下s
#依然是返回一个新的Series,波浪号~表示否定、非的意思
s[~s.isnull()]
#也可以使用 s.notnull
#通过notnull()也能实现,同样也是返回一个新的Series
s[s.notnull()]填充缺失值
fillna()
:用指定值或插值的方式填充缺失值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19用指定值填充缺失值
#用0填充缺失值,返回的依然是一个新的Series
s.fillna(value=0)
#如果希望直接修改原Series
#一种方法是之前说的直接赋值,另一种是添加参数inplace=True
s.fillna(value=0,inplace=True)
#用插值填充缺失值
#初始化一下s
s = pd.Series([10,np.nan,15,19,None])
#向前填充(ffill,全称是front fill)
s.fillna(method="ffill")
#向后填充(bfill,全称是back fill)
s.fillna(method="bfill")`
排序
1 | #创建一个Series |
排名
1 | # rank() |
Series的描述性统计
- 值的计数
Series.value_counts()
1 | #创建一个Series |
Series的向量化运算
可对Series进行批量操作,并且返回一个新的Series
并不会在原基础上直接修改
1
2
3 s5 + 1000
s5 * 2
s5 / 10
自动对齐相同索引的数据,不同索引的数据对不上,则显示NaN
1
2
3
4
5
6
7
8
9 s6 = pd.Series([35000,40000,71000,5500],index=list("abcd"))
s7 = pd.Series([222,35000,4000,2222],index=list(aqtb))
s6 + s7
a 35222.0
b 42222.0
c NaN
d NaN
q NaN
t NaN