padans之Series入坑之门

一 前言

本篇文章是pandas的Series基础入门文章,pandas是一个强大的数据分析工具,其核心就是 Series 存储一维数据,DataFram储存多维数据;使用pandas的好处就是可以节省许多代码,不必写许多数据分析函数;疫情情况下,工作不容易,每天还要为吃饭奔波,成年人的世界就没有容易二字,希望读者珍惜当下来之不易的生活;有时候一个人真的很酷,但也很苦;

公众号:知识追寻者

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

二打印结构

pandas的库安装建议读者使用anaconda安装,会节省很多力气,后续的许多库都是使用anaconda创建的虚拟环境;要不然使用原生的pip会出现各种问题;

2.1 查看Series结构

Series的结构是是两个并列的数组,左边是索引index,右边是value;当将一个数组传进Series对象之后就会自动创建索引,索引的起始位置为0;

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np


# 打印 ser
ser = pd.Series([1,2,3,4])
print(ser)

输出

0    1
1    2
2    3
3    4
dtype: int64

2.2 获得所有值

单独的获得Series值可以使用values属性

ser = pd.Series([1,2,3,4], ['a', 'b', 'c', 'd'])
print(ser.values)

输出

[1 2 3 4]

2.3 获得所有索引

虽然Series有默认的索引,但有时候应为需求,我们需要自定义索引(像字典一样,有key,value,通过key获得value)就可以使用如下方式,默认第一个参数是值,第二个参数是索引;单独的获得索引可以使用index属性

ser = pd.Series([1,2,3,4], ['a', 'b', 'c', 'd'])
print(ser.index)

输出

Index(['a', 'b', 'c', 'd'], dtype='object')

三取值切片

3.1 指定取值

Series的取值类似数组,如下所示索引0和自定义索引a都指向值1

# val - index
ser = pd.Series([1,2,3,4], ['a', 'b', 'c', 'd'])
# 指定索引后,按数字索引与指定索引一致
print(ser[0])
print(ser['a'])

输出

1
1

3.2 切片取值

Series的切片类似数组, 如下所示, 切片为 0~2(不包括2)

ser = pd.Series([1,2,3,4], ['a', 'b', 'c', 'd'])
# 切片
print(ser[0:2])

输出

a    1
b    2
dtype: int64

3.3 可选取值

除了简单的取值,还可以通过指定多个的索引进行取值,如下所示 指定索引 a,c 为一个数组作为参数;

# val - index
ser = pd.Series([1,2,3,4], ['a', 'b', 'c', 'd'])
print(ser[['a','c']])

输出

a    1
c    3
dtype: int64

四赋值操作

Series赋值操作与数组一致,在对应的元数位置赋值即可;

ser = pd.Series([1,2,3,4], ['a', 'b', 'c', 'd'])
ser[0] = 5
ser[1] = 6
print(ser)

输出

a    5
b    6
c    3
d    4
dtype: int64

五创建方式

5.1 numpy数字创建方式

简单的使用numpy 创建一个数组,将其作为参数放进Series对象即可;这种形式有个缺点就是如果numpy创建的数组值变了,Series的值也会随之改变,类似numpy的视图思路;

arr = np.array([1,2,3,4])
ser = pd.Series(arr)

输出

0    1
1    2
2    3
3    4
dtype: int32

5.2 字典方式

除了通过简单的使用数组入参,还可以使用字典的方式,这样就将key转为了Series的index,value作为Series的值

dic = {'a':'100','b':'101'}
ser = pd.Series(dic)
print(ser)

输出

a    100
b    101
dtype: object

六 算术运算

Series 的算术运算支持 + , - * / 等各种数字函数,类似numpy的算术运算;下面的示例中每次运算都是元素级别操作

3.1 乘法

ser = pd.Series([1,2,3,4])
ser_multiply = ser * 2
print(ser_multiply)

输出

0    2
1    4
2    6
3    8
dtype: int64

6.2 加法

ser = pd.Series([1,2,3,4])
ser_add = ser + 2
print(ser_add)

输出

0    3
1    4
2    5
3    6
dtype: int64

6.3 除法

ser = pd.Series([1,2,3,4])
ser_div = ser / 2
print(ser_div)

输出

0    0.5
1    1.0
2    1.5
3    2.0
dtype: float64

6.4 减法

ser = pd.Series([1,2,3,4])
ser_sub = ser - 2
print(ser_sub)

输出

0   -1
1    0
2    1
3    2
dtype: int64

七 简单筛选

7.1 去重

去重筛选可以使用 unique 函数,类似 SQL中 distinct关键字;

ser = pd.Series([0,1,2,3,4,0,1,2,3,4])
print(ser.unique())

输出

[0 1 2 3 4]

7.2 统计个数

统计个数使用 value_counts 函数,会统计每个元素出现的个数,当然是具有去重效果;

ser = pd.Series([0,1,2,3,4,0,1,2,3,4])
print(ser.value_counts())
4    2
3    2
2    2
1    2
0    2
dtype: int64

7.3 是否存在

判断Series 是否存在某个元数 可以使用 isin ,参数为一个数组,可以进行多个判断;如下所示判断Series是否存在 0 或者 1

ser = pd.Series([0,1,2,3,4,0,1,2,3,4])
print(ser.isin([0,1]))

输出

0     True
1     True
2    False
3    False
4    False
5     True
6     True
7    False
8    False
9    False
dtype: bool

八 Nan

Nan在数字类型中一般代表非数字类型数字,或者超出指定数据类型的范围;

8.1 创建带有Nan的Serial

创建一个带有Nan的 Series 可以使用 numpy.NaN;

ser = pd.Series([0,1,2,3,np.NaN,4,5])
print(ser)

输出

0    0.0
1    1.0
2    2.0
3    3.0
4    NaN
5    4.0
6    5.0
dtype: float64

8.2 空判定

判断一个Series是否存在空值 即 NaN 的情况,可以使用 isnull() 函数,返回的是布尔类型

ser = pd.Series([0,1,2,3,np.NaN,4,5])
print(ser.isnull())

输出

0    False
1    False
2    False
3    False
4     True
5    False
6    False
dtype: bool

还可以将 isnull() 的结果作为过滤条件筛选出Nan的index

ser = pd.Series([0,1,2,3,np.NaN,4,5])
# 筛选空
print(ser[ser.isnull()])

输出

4   NaN
dtype: float64

8.3 非空判断

有了空判断就有非空判断,使用notnull() 函数就可以达到目的,返回的同样是布尔类型

ser = pd.Series([0,1,2,3,np.NaN,4,5])
print(ser.notnull())

输出

0     True
1     True
2     True
3     True
4    False
5     True
6     True
dtype: bool

notnull()的结果作为筛选条件,就会输出全是非空的indx 和对应的value

ser = pd.Series([0,1,2,3,np.NaN,4,5])
# 筛选非空
print(ser[ser.notnull()])

输出

0    0.0
1    1.0
2    2.0
3    3.0
5    4.0
6    5.0
dtype: float64

九 name属性

9.1 Series对象的name属性

Series 对象的有个name属性,可以通过 赋值或者入参的形式指定;

ser = pd.Series([0,1,2,3,np.NaN,4,5])
ser.name = 'zszxz'
print(ser)

输出

0    0.0
1    1.0
2    2.0
3    3.0
4    NaN
5    4.0
6    5.0
Name: zszxz, dtype: float64

9.2 Series 的 index 的name 属性

注意与Series对象的name属性区分开,这个Series 对象索引的name属性;

ser = pd.Series([0,1,2,3,np.NaN,4,5])
ser.index.name = 'zszxz'
print(ser)

输出

zszxz
0    0.0
1    1.0
2    2.0
3    3.0
4    NaN
5    4.0
6    5.0
dtype: float64
posted @ 2020-05-07 14:51  知识追寻者  阅读(328)  评论(0编辑  收藏  举报