当前位置: 首页>编程语言>正文

获取series某记录的位置索引 提取series数据

Pandas简介
pandas是数据分析核心工具包。基于Numpy构建,为数据分析而存在。一维数组Series+二维数组Dataframe,可直接读取数据并作处理,效率高使用简单。兼容各种数据库,支持各种分析算法。
Series和Dataframe都是pandas的数据结构。
Series相关知识点总结

Series的相关知识点总结表.png
(1)Series的基本特征
import numpy as np
import pandas as pd
# 导入numpy、pandas
s=pd.Series(np.random.rand(10))
print(s,type(s))
print('------------')
# 查看数据与数据类型
# 输出结果看s是pandas的series
# 用.index查看Series的index
# Series的index的类型是rangeindex,是一个视图
print(s.index,type(s.index))
print('---------')
# 用.values查看Series的values
# Series的values的类型是ndarray,是一个一维数组
print(s.values,type(s.values))
输出结果:
0    0.060467
1    0.040170
2    0.473326
3    0.610087
4    0.156201
5    0.257343
6    0.187864
7    0.582866
8    0.690709
9    0.630344
dtype: float64 
------------
RangeIndex(start=0, stop=10, step=1) 
# index表示从0开始10结束,步长为1
---------
[ 0.06046737  0.04017007  0.47332572  0.61008698  0.15620063  0.25734266
0.18786369  0.58286576  0.69070927  0.63034371] 
(2)Series的创建方法
创建Series用到 pd.Series() ,一共有3种创建Series的方法。
--->>> 方法1:通过dict字典,用pd.Series 创建Series;字典的key就是index,values就是values
# Series的创建,方法一
# 通过dict字典,用pd.Series() 创建Series
# 字典的key就是index,values就是values
dic1={'a':1,'b':2,'c':3,'d':4}
s1=pd.Series(dic1)
print(s1)
dic2={'a':10,'b':{'c':100,'d':200,'e':300},'f':20}
s2=pd.Series(dic2)
print(s2)
输出结果:
a    1
b    2
c    3
d    4
dtype: int64
a                                10
b    {'e': 300, 'c': 100, 'd': 200}
f                                20
dtype: object
--->>> 方法2:通过一维数组,用pd.Series 创建Series
# Series的创建,方法二
# 通过一维数组,用pd.Series() 创建Series
ar=np.random.rand(5)
print(ar,ar.shape)
# 创建ar一维数组
s=pd.Series(ar,index=['a','b','c','e','f'],dtype=np.object)
print(s,type(s),s.dtype)
# Series的index默认从0开始,步长为1
# index参数:设置index,长度保持一致
# dtype参数:设置数值类
输出结果:
[ 0.2012631   0.1001891   0.97043809  0.98347688  0.99686837] (5,)
a    0.201263
b    0.100189
c    0.970438
e    0.983477
f    0.996868
dtype: object object
--->>> 方法3:通过标量创建,用pd.Series 创建Series
# Series的创建,方法三
# 通过标量创建,用pd.Series() 创建Series
s=pd.Series(12,index=range(5))
print(s)
#如果data是标量值,则必须提供索引。该标量值会重复,来匹配索引的长度
输出结果:
0    12
1    12
2    12
3    12
4    12
dtype: int64
(3)Series的名称属性
Series数组的名称创建、用.name输出名称;Series数组名称的重命名,用.rename()
# 创建一个Series,设置name参数创建数组名称
# name为Series的一个参数,创建一个数组的名称
s1=pd.Series(np.random.rand(5),name='aaa')
print(s1)
s2=pd.Series(np.random.rand(5))
print(s2)
print(s1.name,s2.name)
# s1是有创建数组名称的,输出为aaa;
# s2没有创建数组名称的,输出为None
print('-------')
print(s1.rename('bbb'))
print(s1.name)
# s1.rename()将s1原名aaa改为bbb
# 输出s1.name的名字,返回仍旧为aaa
# 说明.rename()重命名一个数组的名称,是会指向一个新数组,且新数组与原数组一样,但原数组名称不变
输出结果:
0    0.780331
1    0.297437
2    0.238227
3    0.363761
4    0.447678
Name: aaa, dtype: float64
0    0.023001
1    0.089099
2    0.797804
3    0.060008
4    0.796604
dtype: float64
aaa None
-------
0    0.780331
1    0.297437
2    0.238227
3    0.363761
4    0.447678
Name: bbb, dtype: float64
aaa
(4)Series的索引与切片
--->>> Series的标索引
# 【下标索引,与序列类似】
s=pd.Series(np.random.rand(5),index=list('abcde'))
print(s)
print('-------')
print(s[0]) # 定位索引为0的值
print(s[0].dtype) # 输出结果float的浮点型
print(type(s[0])) # 输出结果是numpy的浮点型
#print(s[-1])是错误语法,所以Series的下标索引与序列的下标索引也不完全相同
输出结果:
a    0.491990
b    0.092502
c    0.621547
d    0.222271
e    0.430568
dtype: float64
-------
0.491989880552
float64
--->>> Series的标签(index)索引
#【标签(index)索引】
# 类似下标索引,用[]表示,内写上index,注意index是字符串
s=pd.Series(np.random.rand(6),index=list('abcdef'))
print(s)
# 定位单个值的标签索引写法:
# 定位index为b的值
print(s['b'])
print('--------')
# 定位多个值的标签索引写法:
# 需要选择多个标签的值,用[[]]来表示(相当于[]中包含一个列表)
# 多标签索引的结果是新的数组
print(s[['b','d','f']])
输出结果:
a    0.325852
b    0.280335
c    0.374167
d    0.579232
e    0.660827
f    0.150477
dtype: float64
0.280335497476
--------
b    0.280335
d    0.579232
f    0.150477
dtype: float64
--->>> Series的切片
若Series的标签index一开始是数字,不是字符串,那么默认s[索引]先使用的是下标索引;若Series有明确的标签非数字,那就使用标签index索引
s1=pd.Series(np.random.rand(5))
s2=pd.Series(np.random.rand(5),index=list('abcde'))
print(s1)
print(s2)
print(s1[0:2])
# s1的index为默认数字,因此切片索引默认先使用下标索引
# 下标索引做切片,末端不包含
# 下标索引做切片的写法与list类似
print(s1[:4])
print(s1[1:-1])
print(s1[::2])
print(s2['a':'c'])
# s2的index为重新赋给
# 标签index索引做切片,末端包
输出结果:
0    0.279647
1    0.470918
2    0.424850
3    0.387155
4    0.696179
dtype: float64
a    0.607845
b    0.304126
c    0.170116
d    0.064967
e    0.836235
dtype: float64
0    0.279647
1    0.470918
dtype: float64
0    0.279647
1    0.470918
2    0.424850
3    0.387155
dtype: float64
1    0.470918
2    0.424850
3    0.387155
dtype: float64
0    0.279647
2    0.424850
4    0.696179
dtype: float64
a    0.607845
b    0.304126
c    0.170116
dtype: float64
--->>> Series的布尔型索引
对数组做判断之后,返回的是一个由布尔值组成的新的数组
布尔型索引方法:用[判断条件]表示,其中判断条件可以是一个语句,或者是一个布尔型数组
s=pd.Series(np.random.rand(5))
s[4]=np.nan
# 索引为4的值赋予空值
# 空值表示:np.nan/None代表空值/NaN代表有问题的数值(NaN最后会被识别为空值)
print(s)
print(s<0.5)
# 判断s中是否有小于0.5的,输出结果为bool
print(s.isnull())
# 判断s中是否有空值,空值返回真,非空值返回假,输出结果为bool
print(s.notnull())
# 判断s中是否有非空值,非空值返回真,空值返回假
# 对数组做判断之后,返回的是一个由布尔值组成的新的数组
输出结果:
0    0.282185
1    0.959061
2    0.279785
3    0.067625
4         NaN
dtype: float64
0     True
1    False
2     True
3     True
4    False
dtype: bool
0    False
1    False
2    False
3    False
4     True
dtype: bool
0     True
1     True
2     True
3     True
4    False
dtype: bool
(5)Series的基本技巧
--->>> 用.head()和.tail(),查看头部和尾部数据,均默认查看5条
# 查看Series数组的数据
s=pd.Series(np.random.rand(8))
print(s)
print('----------')
print(s.head())
print(s.head(3))
# .head() 默认查看前5条数据
# s.head(3)表示查看前3条数据
print(s.tail())
print(s.tail(4))
# s.tail()默认查看尾部后5条数据
# s.tail(4)表示查看尾部后4条数据
--->>> 用.reindex(),重新索引series,根据新索引顺序重新排序,且会生成新的数组,原数组不受任何影响
s=pd.Series(np.random.rand(5),index=list('abcde'))
print(s)
s1=s.reindex(list('bceafg'))
print(s1)
print(s)
# 用.reindex()重新索引series,根据新索引顺序重新排序
# .reindex()中也是写列表
# 重新索引中的f、g原来没有对应的值,因此在新数组中引入缺失值NaN填充
s2=s.reindex(list('acef'),fill_value=100)
print(s2)
# fill_value参数:为缺失的值填充指定值
输出结果:
a    0.689542
b    0.735547
c    0.255595
d    0.447040
e    0.718980
dtype: float64
b    0.735547
c    0.255595
e    0.718980
a    0.689542
f         NaN
g         NaN
dtype: float64
a    0.689542
b    0.735547
c    0.255595
d    0.447040
e    0.718980
dtype: float64
a      0.689542
c      0.255595
e      0.718980
f    100.000000
dtype: float64
--->>> Series数组的对齐
# Series对齐
s1 = pd.Series(np.random.rand(3), index = ['Jack','Marry','Tom'])
s2 = pd.Series(np.random.rand(3), index = ['Wang','Jack','Marry'])
print(s1)
print(s2)
print('--------')
print(s1+s2)
# Series 和 ndarray 之间的主要区别是,Series 上的操作会根据标签自动对齐
# index顺序不会影响数值计算,Series会以标签对齐来计算
# 空值和任何值计算结果扔为空值
输出结果:
Jack     0.753732
Marry    0.180223
Tom      0.283704
dtype: float64
Wang     0.309128
Jack     0.533997
Marry    0.626126
dtype: float64
Jack     1.287729
Marry    0.806349
Tom           NaN
Wang          NaN
dtype: float64
--->>> 用.drop,删除series数组的元素
# 用.drop,删除series数组的元素
# .drop删除元素不影响原数组,属于复制一个相同副本然后删除,这时参数inplace默认为False
# 若参数inplace默认为True,则删除原数组的元素,没有副本生成
s = pd.Series(np.random.rand(5), index = list('ngjur'))
print(s)
print('--------')
s1=s.drop('n')
s2=s.drop(['j','r'])
s3=s.drop('g',inplace=True)
print(s1)
print('--------')
print(s2)
print('--------')
print(s3)
print('--------')
print(s)
输出结果:
n    0.425891
g    0.341889
j    0.859872
u    0.028564
r    0.214625
dtype: float64
--------
g    0.341889
j    0.859872
u    0.028564
r    0.214625
dtype: float64
--------
n    0.425891
g    0.341889
u    0.028564
dtype: float64
--------
None
--------
n    0.425891
j    0.859872
u    0.028564
r    0.214625
dtype: float64
#s3删除g的值,因inplace=True没有副本生成,且在原数组删除g的值,所以s3=None不存在
#返回的s没有了g的值,因为s3=s.drop('g',inplace=True),在原数组中删除了g的值
--->>> 给Series数组添加元素/数组
# 给Series数组添加元素/数组
# 【添加元素:直接通过下标索引/标签index添加值】
s1 = pd.Series(np.random.rand(5))
s2 = pd.Series(np.random.rand(5), index = list('ngjur'))
print(s1)
print(s2)
s1[5]=100
s2['e']=120
print(s1)
print(s2)
print('--------------------')
# 【添加数组,用.append()】
# 通过.append方法,直接添加一个数组
# .append方法生成一个新的数组,不改变之前的数组
s3=s1.append(s2)
# 将s2数组添加到s1数组中
# 生成了新的数组,所以s1数组没有改变
print(s3)
print(s1)
输出结果:
0    0.919861
1    0.271166
2    0.459674
3    0.373606
4    0.838353
dtype: float64
n    0.179374
g    0.866121
j    0.714827
u    0.520926
r    0.808706
dtype: float64
0      0.919861
1      0.271166
2      0.459674
3      0.373606
4      0.838353
5    100.000000
dtype: float64
n      0.179374
g      0.866121
j      0.714827
u      0.520926
r      0.808706
e    120.000000
dtype: float64
--------------------
0      0.919861
1      0.271166
2      0.459674
3      0.373606
4      0.838353
5    100.000000
n      0.179374
g      0.866121
j      0.714827
u      0.520926
r      0.808706
e    120.000000
dtype: float64
0      0.919861
1      0.271166
2      0.459674
3      0.373606
4      0.838353
5    100.000000
dtype: float64
--->>> 修改Series数组的元素
# 修改Series数组的元素
s = pd.Series(np.random.rand(3), index = ['a','b','c'])
print(s)
s['a'] = 100
s[['b','c']] = 200
print(s)
# 通过索引直接修改,类似序列
输出结果:
a    0.715710
b    0.421069
c    0.571367
dtype: float64
a    100.0
b    200.0
c    200.0
dtype: float64

https://www.xamrdz.com/lan/5v71961856.html

相关文章: