pandas groupby用法什么时候用 series 不用列表?

1.初识Series对象Pandas中的Series对象是一个带索引数据构成的一维数组。可以用一个数组来创建Series对象:import pandas as pd
data=pd.Series([1,2,3,4,5])
data
从上面的结果中,不难发现Series对象将一组对象和一组索引绑定在一起,我们可以通过values属性和index属性来获取数据。values属性返回的结果与Numpy数组类似;index属性返回的结果是一个类型为pd.Index的类数组对象。data.index,data.values
(RangeIndex(start=0, stop=5, step=1), array([1, 2, 3, 4, 5], dtype=int64))
和Numpy数组一样,数据可以通过Python的中括号索引标签获取:data[3]
4
data[:-3]
不难看出,Pandas中的Series对象比它模仿的一维Numpy数组更加通用、灵活。2.Series是通用的Numpy数组到目前为止,我们可能看上面的解释认为Series对象和一维Numpy数组基本可以等价交换,但两者间的本质差异是索引:(1)Numpy数组通过隐式定义的整数索引来获取数值;(2)Series对象用一种显式定义的索引与数值关联。显式索引的定义让Series对象有了更强的能力。例如,索引不再仅仅是整数,还可以是任意想要的类型。如果需要,完全可以用字符串定义索引:data_1=pd.Series([0.5,1.0,1.5,2.0],index=['a','b','c','d'])
data_1
获取数据的方式和之前一样,例如:data_1['a']
0.5
当然了,也可以使用不连续或者不按顺序的索引:data_2=pd.Series([1,2,3,4],index=[1,3,5,7])
data_2
3.Series是特殊的字典我们可以把Pandas中的Series对象看成一种特殊的Python字典,字典是一种将任意键映射到一组任意值的数据结构,而Series对象其实是一种将类型键映射到一组类型值的数据结构。类型至关重要:就像Numpy数组背后特定类型的经过编译的代码使得它在某些操作上比普通的Python列表更加高效一样,Pandas中的Series对象的类型信息使得它在某些操作上比Python的字典更高效。可以直接使用Python的字典创建一个Series对象,让Series对象与字典的类比更加清晰:love_percent={'beijing':85,'shanghai':75,'hangzhou':98,'suzhou':90,'nanjing':91}
love_percent
{'beijing': 85, 'shanghai': 75, 'hangzhou': 98, 'suzhou': 90, 'nanjing': 91}
此时我们得到的是一个字典格式:love_percent_1=pd.Series(love_percent)
love_percent_1
用字典创建Series对象时,其索引默认按照顺序排列。典型的字典数值获取方式依然有效:love_percent_1['hangzhou']
98
和字典不同,Series对象还支持数组形式的操作,比如切片,具体与上面一致,不再讲述。4.数据取值与选择如前面的讲述,Series对象与一维Numpy数组和标准Python字典在许多方面都一样。只要牢记这两个类比,就可以帮助我们更好的理解Series对象的数据索引与选择模式。1.将Series对象看作字典和字典一样,Series对象提供了键值对的映射:love_percent_1['hangzhou']
98
我们还可以用Python字典的表达式和方法来检测键/索引和值:'changsha' in love_percent_1
False
love_percent_1.keys()
Index(['beijing', 'shanghai', 'hangzhou', 'suzhou', 'nanjing'], dtype='object')
list(love_percent_1.items())
[('beijing', 85),
('shanghai', 75),
('hangzhou', 98),
('suzhou', 90),
('nanjing', 91)]
Series对象还可以用字典语法调整数据,就像你可以通过增加新的键扩展字典一样,也可以通过增加新的索引值扩展Series:love_percent_1['hangzhou']=95
love_percent_1
2.将Series对象看作一维数组Series不仅有着和字典一样的接口,而且还具备和Numpy数组一样的数组数据选择功能,包括索引、掩码、花哨的索引等操作,具体示例如下所示:将显式索引作为切片
love_percent_1['beijing':'suzhou']
将隐式整数索引作为切片
love_percent_1[1:3]
掩码
love_percent_1[love_percent_1>85]
花哨的索引
love_percent_1[['beijing','hangzhou']]
在以上示例中,切片是绝大多数混乱之源。需要注意的是,当使用显式索引做切片时,结果包含最后一个索引,而当使用隐式索引做切片时,结果不包含最后一个索引。3.索引器:loc、iloc由于整数索引很容易造成混淆,所以Panda提供了一些索引器(indexer)属性来作为取值的方法。它们不是Series对象的函数方法,而是暴露切片接口的属性。第一种索引器是loc属性,表示取值和切片都是显式的:love_percent_1.loc['shanghai']
75
love_percent_1['shanghai':'hangzhou']
第二种是iloc属性,表示取值和切片都是Python形式的隐式索引:love_percent_1.iloc[1]
75
}
一。概念Series相当于一维数组。1.调用Series的原生方法创建import pandas as pds1 = pd.Series(data=[1,2,4,6,7],index=['a','b','c','d','e'])# index表示索引print(s1['a'])print(s1[0])print(s1[:3])# 在Series中切片是一个闭合区间表示Series中0-3的元素 print(s1['a':'d']) # 范围是一个闭合print(s1[['a','d']]) #用逗号隔开,表示分别取这两个元素 注意
这里用两个中括号括起来2.使用字典生成Seriessdata = {'beijing':45000, 'shanghai':71000, 'guangzhou':16000, 'shengzheng':5000}obj3 = Series(sdata)print(obj3)print("-"*40)states = ['hangzhou', 'shanghai', 'guangzhou','beijing']
obj4 = Series(sdata, index = states) # 索引重置 使用字典生成Series,并额外指定index,不匹配部分为NaN。 print(obj4)# #替换index 索引替换obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']print(obj)#Series相加,相同索引部分相加。不相同的索引部分为NaN print(obj3 + obj4)
二。Series的相关特性及函数from pandas import Series#用数组生成Series ,默认情况下使用数字索引obj = Series([4, 7, -5, 3])print(obj)print(obj.values)
print(obj.index)
print(obj.shape,obj.ndim) # 这里 shape表示每一个维度的数量, ndim表示的是维度
obj2 = Series([4, 7, -5, 3], index = ['d', 'b', 'a', 'c'])print(obj2.index)print(obj2['a'])obj2['d']=6 #替换Series中的元素print(obj2)# print(obj2[:3]) # 数字的下标还存在,也可以分片# print(obj2[['c', 'a', 'd']]) #获取索引a,c,d的值# print(obj2[obj2 > 0])
# 找出大于0的元素# print('b' in obj2) # 判断索引是否存在
# print('e' in obj2)
# print("-"*40)# # #指定Series及其索引的名字obj4.name = '我定义的名字'obj4.index.name = 'index'print(obj4) 持续更新中。。。。,欢迎大家关注我的公众号LHWorld.http://weixin.qq.com/r/KThudqrEqPfXre4V9207 (二维码自动识别)}
Pandas 系列之Series类型数据本文开始正式写Pandas的系列文章,就从:如何在Pandas中创建数据开始。Pandas中创建的数据包含两种类型:Series类型DataFrame类型内容导图Series类型Series 是一维数组结构,它仅由index(索引)和value(值)构成的。Series的索引具有唯一性,索引既可以是数字,也可以是字符,系统会自动将它们转成一个object类型(pandas中的字符类型)。DataFrame类型DataFrame 是将数个 Series 按列合并而成的二维数据结构,每一列单独取出来是一个 Series ;除了拥有index和value之外,还有column。下图中:索引Index:0,1,2,3…….字段属性:fruit,number值value:苹果、葡萄等;200、300等导入库先导入两个库:import pandas as pd
import numpy as np
Series类型创建与操作通过可迭代类型列表、元组生成通过python字典生成通过numpy数组生成列表生成通过列表的方式生成Series数据s1 = pd.Series([7,8,9,10])
s1
# 结果
0
7
1
8
2
9
3
10
dtype: int64
s2 = pd.Series(list(range(1,8)))
s2
# 结果
0
1
1
2
2
3
3
4
4
5
5
6
6
7
dtype: int64
元组生成下面的方法是通过元组生成Series数据s3 = pd.Series((7,8,9,10,11))
s3
# 结果
0
7
1
8
2
9
3
10
4
11
dtype: int64
s4 = pd.Series(tuple(range(1,8)))
#
从1到8,不包含8
s4
# 结果
0
1
1
2
2
3
3
4
4
5
5
6
6
7
dtype: int64
使用字段创建字典的键为索引,值为Series结构对应的值dic_data = {"0":"苹果", "1":"香蕉", "2":"哈密瓜","3":"橙子"}
s5 = pd.Series(dic_data)
s5
# 结果
0
苹果
1
香蕉
2
哈密瓜
3
橙子
dtype: object
使用numpy数组s6 = pd.Series(np.arange(3,9))
s6
# 结果
0
3
1
4
2
5
3
6
4
7
5
8
dtype: int64
指定索引(列表)默认的索引都是从0开始的数值,可以在创建的时候指定每个索引# 默认
s1 = pd.Series([7,8,9,10])
s1
# 结果
0
7
1
8
2
9
3
10
dtype: int64
s7 = pd.Series([7,8,9,10], index=["A","B","C","D"])
# 指定索引值
s7
# 结果
A
7
B
8
C
9
D
10
dtype: int64
指定索引(字典形式)字典的键作为索引值dic_data = {"水果1":"苹果",
"水果2":"香蕉",
"水果3":"哈密瓜",
"水果4":"橙子"
}
s8 = pd.Series(dic_data)
s8
# 结果
水果1
苹果
水果2
香蕉
水果3
哈密瓜
水果4
橙子
dtype: object
查看索引值s8
# 结果
水果1
苹果
水果2
香蕉
水果3
哈密瓜
水果4
橙子
dtype: object
s8.index
# 查看索引值
# 结果
Index(['水果1', '水果2', '水果3', '水果4'], dtype='object')
查看值s8
# 结果
水果1
苹果
水果2
香蕉
水果3
哈密瓜
水果4
橙子
dtype: object
s8.values
# 结果
array(['苹果', '香蕉', '哈密瓜', '橙子'], dtype=object)
更改索引# 1、新索引
index_new = ['one', 'two', 'three', 'four']
# 2、赋值
s8.index = index_new
s8
# 结果
one
苹果
two
香蕉
three
哈密瓜
four
橙子
dtype: object
查看是否存在空值s7
# 结果
A
7
B
8
C
9
D
10
dtype: int64
s7.isnull()
# 没有空值
# 结果
A
False
B
False
C
False
D
False
dtype: bool
s7.notnull()
# 结果
A
True
B
True
C
True
D
True
dtype: bool
查看某个索引的值s7
A
7
B
8
C
9
D
10
dtype: int64
两种方式查看:通过自定义的索引查看通过对应的数值索引查看s7["A"]
#
自定义的索引值
7
s7[0]
# 默认的数值索引
7
s7["D"]
10
s7[3]
10
将Series转成字典s_dic = s7.to_dict()
# 转成字典形式
s_dic
# 结果
{'A': 7, 'B': 8, 'C': 9, 'D': 10}
type(s_dic)
# 结果显示为字典类型
# 结果
dict
给Series索引命名s8
# 结果
one
苹果
two
香蕉
three
哈密瓜
four
橙子
dtype: object
s8.index
# 原索引
Index(['one', 'two', 'three', 'four'], dtype='object')
s8.index.name = "水果"
# 索引命名
s8
结果显示为:水果
one
苹果
two
香蕉
three
哈密瓜
four
橙子
dtype: object
s8.index
# 更改之后的索引
Index(['one', 'two', 'three', 'four'], dtype='object', name='水果')
修改Series数值s8
# 结果为
水果
one
苹果
two
香蕉
three
哈密瓜
four
橙子
dtype: object
s8["three"] = "西瓜"
# 等价于s8[2] = "西瓜"
s8
更改之后的值为:水果
one
苹果
two
香蕉
three
西瓜
four
橙子
dtype: object
Series结构转成DataFrame结构s8
水果
one
苹果
two
香蕉
three
西瓜
four
橙子
dtype: object
在将s8转成DataFrame的过程中涉及到3个函数:to_frame:转成DataFramereset_index:DataFrame类型的索引重置rename:DataFrame的字段属性重置关于DataFrame的相关内容下节详细讲解,敬请期待!}

我要回帖

更多关于 pandas groupby用法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信