pandas中的数据结构Series简单介绍

10 篇文章 0 订阅
8 篇文章 1 订阅

pandas中主要有两种数据结构:Series 和 DataFrame。
Series 是带有轴标签(索引)的一维数组。
DataFrame 是二维表格数据,有行索引也有列索引,可以看作是扩展的 Series。

Series 和 DataFrame 的区别

我们可以通过下面的例子来看看,Series 和 DataFrame 的区别。

import pandas as pd
dict1 = {'a':[1, 2, 3], 'b':[4, 5, 6], 'c':[7, 8, 9]}
s = pd.Series(dict1)
df = pd.DataFrame(dict1)
print("Series数据:")
print(s)
print('='*20)
print("DataFrame数据:")
print(df)
'''
Series数据:
a    [1, 2, 3]
b    [4, 5, 6]
c    [7, 8, 9]
dtype: object
====================
DataFrame数据:
   a  b  c
0  1  4  7
1  2  5  8
2  3  6  9
'''

对于相同的字典数据,Series 会将 key 当做索引,value 当做一维数组的值,每个索引对应一个列表数据,也就是一维数组的每个元素都是一个列表。而 DataFrame 会将 key 当做列索引,value 分别作为每列的值,建立了二维的表格数据,每个元素是一个数字。

Series 数据构建

创建 Series 的结构数据

import pandas as pd

# 创建一个 Series 的结构数据
s = pd.Series([3, -1, 6, -5, 0, 10], index=None)  # index 默认是 None,也就是从 0 开始的序列数字
print('Series数据:')
print(s)
print('=' * 20)
print("索引(index):", s.index)  # 这里是默认索引
print('=' * 20)
print('数据值(values):', s.values)
'''
Series数据:
0     3
1    -1
2     6
3    -5
4     0
5    10
dtype: int64
====================
索引(index): RangeIndex(start=0, stop=6, step=1)
====================
数据值(values): [ 3 -1  6 -5  0 10]
'''

指定Series的索引

import pandas as pd

s = pd.Series([3, -1, 6, -5, 0, 10], index=None)  # 可以在这里的 index 中指定索引
s.index = ['d', 'b', 'f', 'e', 'a', 'c']  # 也可以单独指定
print('指定Series的index:')
print(s)
print('=' * 20)
print('重新定义index:')
s = s.reindex(['c', 'd', 'e', 'f', 'g'])  # 如果索引本来就存在,则使用之前的值;如果不存在,就默认填充为 NaN。
print(s)
'''
指定Series的index:
d     3
b    -1
f     6
e    -5
a     0
c    10
dtype: int64
====================
重新定义index:
c    10.0
d     3.0
e    -5.0
f     6.0
g     NaN
dtype: float64
'''

更改 Series 的数值 (可以通过“索引序号”和“索引名称”两种方式来更改)

import pandas as pd

s = pd.Series([3, -1, 6, -5, 0, 10], index=['d', 'b', 'f', 'e', 'a', 'c'])
print('原始数值:')
print(s)
s[0] = 100  # 通过“索引序号”来访问元素
s['b'] = 99  # 通过“索引名称”来访问元素
print('=' * 20)
print('更改数值后:')
print(s)
'''
原始数值:
d     3
b    -1
f     6
e    -5
a     0
c    10
dtype: int64
====================
更改数值后:
d    100
b     99
f      6
e     -5
a      0
c     10
dtype: int64
'''

Series 数据读取

Series 数据访问十分自由,既可以单独获取某一行或者某几行,也可通过切片访问,甚至可以通过条件筛选来访问。读取数据这里主要掌握两种方式:索引名称(标签)和索引序号(下标)。

import pandas as pd

s = pd.Series([3, -1, 6, -5, 0, 10], index=['d', 'b', 'f', 'e', 'a', 'c'])
print("Series 数据为:")
print(s)
# ============获取单行或者多行============
print("============获取单行或者多行(标签和序号两种方式)============")
print("获得单个值:")
print(s['d'])  # 获取单个值,这里使用索引标签
# print(s[0])  # 跟上面的语句,这里使用索引序号
print('获得多行数据:')
# print(s[['d', 'e']])  # 获取多行数据,这里使用索引标签
print(s[[0, 3]])  # 跟上面的语句效果相同,这里使用索引序号
# ============切片访问============
# 索引名称(标签)切片
print("============切片访问(标签和序号两种方式)============")
print('索引名称(标签)切片:')
print(s['d':'f'])  # “索引名称”的方式获取多行数据,前闭后闭
# print(s.loc['d':'f'])  # 跟上面结果相同
# 索引序号(下标)切片
print("索引序号(下标)切片")
print(s[0:2])  # “索引序号(下标)”,前闭后开
# print(s.iloc[0:2])  # 跟上面结果相同
# ============通过条件筛选访问============
print("============通过条件筛选访问============")
print("筛选出值大于 0 的数据:")
print(s[s.values > 0])
# print(s.loc[s.values > 0])  # 跟上面语句功能相同
print("筛选出索引大于 d 的数据:")
print(s[s.index > 'd'])
# print(s.loc[s.index > 'd'])  # 跟上面语句功能相同
'''
Series 数据为:
d     3
b    -1
f     6
e    -5
a     0
c    10
dtype: int64
============获取单行或者多行(标签和序号两种方式)============
获得单个值:
3
获得多行数据:
d    3
e   -5
dtype: int64
============切片访问(标签和序号两种方式)============
索引名称(标签)切片:
d    3
b   -1
f    6
dtype: int64
索引序号(下标)切片
d    3
b   -1
dtype: int64
============通过条件筛选访问============
筛选出值大于 0 的数据:
d     3
f     6
c    10
dtype: int64
筛选出索引大于 d 的数据:
f    6
e   -5
dtype: int64
'''

Series 排序、缺失值

对 Series 数据进行排序

import pandas as pd
import numpy as np

s = pd.Series([3, -1, 6, -5, 0, 10], index=['d', 'b', 'f', 'e', 'a', 'c'])
print(s)
# 排序
print("按照索引排序:")
print(s.sort_index())
print("按照值排序:")
print(s.sort_values(ascending=False))
'''
d     3
b    -1
f     6
e    -5
a     0
c    10
dtype: int64
按照索引排序:
a     0
b    -1
c    10
d     3
e    -5
f     6
dtype: int64
按照值排序:
c    10
f     6
d     3
a     0
b    -1
e    -5
dtype: int64
'''

Series 中的缺失值

import pandas as pd
import numpy as np

s = pd.Series([3, -1, 6, -5, 0, 10], index=['d', 'b', 'f', 'e', 'a', 'c'])
s = s.reindex(['a', 'b', 'c', 'h', 'm'])
print("原始的 Series 数据:")
print(s)
# 判定是否为缺失值
print("判定为缺失值:")
print(s.isnull())
# print(s.isna())  # 跟上一行语句作用相同
print("判定为不是缺失值:")
print(s.notnull())
# print(s.notna())  # 跟上一行语句作用相同
print("获取不是缺失值的数据:")
print(s[s.notnull()])
print("填充缺失值:")
s2 = s.fillna(100)
print(s2)
'''
原始的 Series 数据:
a     0.0
b    -1.0
c    10.0
h     NaN
m     NaN
dtype: float64
判定为缺失值:
a    False
b    False
c    False
h     True
m     True
dtype: bool
判定为不是缺失值:
a     True
b     True
c     True
h    False
m    False
dtype: bool
获取不是缺失值的数据:
a     0.0
b    -1.0
c    10.0
dtype: float64
填充缺失值:
a      0.0
b     -1.0
c     10.0
h    100.0
m    100.0
dtype: float64
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值