共计 3003 个字符,预计需要花费 8 分钟才能阅读完成。
关于 Pandas
Pandas 库基于 Numpy 库,提供了很多用于数据操作与分析的功能。
1. 安装与使用
安装:
pip install pandas
根据惯例,我们使用如下的方式引入 pandas:import pandas as pd
两个常用数据类型:
pandas 提供两个常用的数据类型:
• Series
• DataFrame
In [1]:
import pandas as pd
2.Series 类型
Series 类型类似于 Numpy 的一维数组对象,可以将该类型看做是一组数据与数据相关的标签(索引)联合而构成(带有标签的一维数组对象)。
1. 创建方式
Series 常用的创建(初始化)方式:
• 列表等可迭代对象
• ndarray 数组对象
• 字典对象
• 标量
In [3]:
1. 使用列表创建 series
s=pd.Series([1,2,3])
左边的 0 1 2 位置标签 key
print(s,type(s))
2. 使用字典来创建,可以直接使用字典类型指定每个元素的标签
s=pd.Series({“a”:10,”b”:20,”c”:30})
print(s)
a 10
b 20
c 30
dtype: int64
2. 相关属性
• index
• values
• shape
• size
• dtype
Series 对象可以通过 index 与 values 访问索引与值。其中,我们也可以通过修改 index 属性来修改 Series 的索引。说明:
• 如果没有指定索引,则会自动生成从 0 开始的整数值索引,也可以使用 index 显式指定索引。
• 当数值较多时,可以通过 head 与 tail 访问前 / 后 N 个数据。
• Series 对象的数据只能是一维数组类型。
In [10]:
index 属性 创建了 series 的时候,每个元素的标签,就是 index
如果创建的时候,没有指定 index 属性,使用 0 1 2…. 位置索引来充当 index
如果指定了 index,使用指定的值来充当表标签
s=pd.Series([1,2,3],index=[“a”,”b”,”c”])
索引能不能用整数来充当呢?可以, 但是不建议这样使用
s=pd.Series([1,2,3],index=[2,3,4])
s
s[2]
print(s.shape) # size 都是用来显示 series 中有多少个元素的
(3,)
3.Series 相关操作
Series 在操作上,与 Numpy 数据具有如下的相似性:
• 支持广播与矢量化运算。
• 支持索引与切片。
• 支持整数数组与布尔数组提取元素。
1. 运算
Series 类型也支持矢量化运算与广播操作。计算规则与 Numpy 数组的规则相同。同时,Numpy 的一些函数,也适用于 Series 类型,例如,np.mean,np.sum 等。
多个 Series 运算时,会根据索引进行对齐。当索引无法匹配时,结果值为 NaN(缺失值)。说明:
• 我们可以通过 pandas 或 Series 的 isnull 与 notnull 来判断数据是否缺失。
• 除了运算符以外,我们也可以使用 Series 对象提供的相关方法进行运算【可以指定缺失的填充值】。
• 尽管 Numpy 的一些函数,也适用于 Series 类型,但 Series 与 ndarray 数组对于空值 NaN 的计算处理方式上是不同的。【Numpy 的计算,会得到 NaN,而 Series 会忽略 NaN】
In [12]:
s1=pd.Series([1,2,3])
s2=pd.Series([10,20,30])
s1+1
s1+s2
Out[12]:
0 11
1 22
2 33
dtype: int64
2. 索引
标签索引与位置索引
如果 Series 对象的 index 值为非数值类型,通过 [索引] 访问元素,索引既可以是标签索引,也可以是位置索引。这会在一定程度上造成混淆。我们可以通过:
• loc 仅通过标签索引访问。
• iloc 仅通过位置索引访问。
这样,就可以更加具有针对性去访问元素。
整数数组索引与布尔数组索引
Series 也支持使用整数数组与布尔数组进行索引。与 Numpy 数组相同,二者返回的是原数组数据的拷贝(复制)。
说明:
• 与 ndarray 数组的整数索引不太相同,Series 的整数数组索引,既可以是标签数组索引,也可以是位置数组索引。
In [30]:
s=pd.Series([1,2,3],index=[10,20,30])
s[index]
s[0]
s[10]
不建议直接使用 s[index] index 可能是位置标签,也可能是名字标签
如果一个 series 有了 index 标签,位置索引失效。
为了使用位置索引和标签索引清晰,series 单独提供了,标签索引方式和位置索引方式
loc 仅通过标签索引访问。
iloc 仅仅通过位置进行访问
s=pd.Series([1,2,3],index=[10,20,30])
s.loc[10]
s.iloc[0]
s.ix[index] 老版本 先以标签优先查找,如果标签没找到,则按照位置 不建议使用。
series 可以使用整数数组作为索引,用来提取多个元素(跟 numpy 一致)
s.iloc[0],s.iloc[1]
li_index=[0,1]
s.iloc[li_index]
li_keys=[10,20]
s.loc[li_keys]
series 可以使用布尔数组作为索引,s[布尔数组],可以将 true 对应的元素留下,其余去掉
使用的时候,与或非的规则跟 numpy 一致
s[[True,False,False]]
s=pd.Series(range(20))
s_b=s>10
s[s_b]
Out[30]:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
dtype: int64
3. 切片
Series 也支持切片访问一个区间的元素。与 Numpy 的数组相同,切片返回的是原数组数据的视图。
In [38]:
s=pd.Series(range(20),index=range(100,120))
s
切片获取的时候,也依然遵从索引获取方式,分成按照位置进行切片和按照标签进行切片
loc 切片,则按照标签名切 包含 start,也包含 end
iloc 切片,则按照位置进行切 包含 start,不包含 end
s.iloc[5:10]
s.loc[104:109]
s=pd.Series(range(5),index=[“a”,”b”,”c”,”d”,”e”])
s.loc[“d”]
s.loc[“b”:”d”]
Out[38]:
b 1
c 2
d 3
dtype: int64
4.Series 的 CRUD
Series 索引 - 数值 CRUD 操作:
• 获取值
• 修改值
• 增加索引 - 值
• 删除索引 - 值
In [48]:
s=pd.Series(range(5),index=[“a”,”b”,”c”,”d”,”e”])
(1)获取元素
iloc 或者 loc
(2)增加
s.loc[“f”]=5
(3)修改
s.loc[“f”]=50
s
(4)删除
s.drop(标签)
inplace:false 默认,代表是否进行原地修改。
效率特别重要,原地操作不需要占用额外的内存。如果源数据对后期使用不大,可以进行原地操作,来节省内存。inplace 设置成 True
s.drop(“a”)
s.drop(“a”,inplace=True)
s
Out[48]:
b 1
c 2
d 3
e 4
f 50
dtype: int64
将请期待下一篇——Pandas 常用的两种数据类型之“DataFrame”
如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。
▼更多干货分享,详情请关注 公众号Python 爬虫与大数据分析呀!▼