今天主要学习series这种数据结构。
python的常用数据结构分为series和Dataframe,前者形式类似于带标签的一维向量,后者形式则是带有横纵标签的表格。'''
先按条目讲述series
1.series由value和index构成,一个是值一个是索引,其中的数据是numpy数组的array数组构成的
2.series可以看成一个定长有序字典,index是键,value是值
3.series的value和index是互相独立的,但是和numpy型数组一样运算会保留键对之间的联结。
4.series因为有键所以是竖着的。
5.series、array中的数据类型必须是相同的,但list中可存储不同类型数据。
下面是代码。
# 进入操作阶段,首先是创建 '''无索引创建的时候,索引就是从0开始的数值 有索引但没有自定义对应的时候自动对应 可以自定义对应''' '''listser = pd.Series(list(x*x for x in range(5)),index=['a','b','c','d','e']) print(tser) #由列表数据的到series,值和键都可以用列表表示。''' dict = {'a':'+','b':'-','c':'=','d':'*','e':'/'} dictser = pd.Series(dict) '''print(dictser)''' array = np.arange(5,10) arrser = pd.Series(array,index = list("abcde")) #print(arrser) #上述就是结合三种数据类型的操作,而只要是由键对一一对应的类型都可以 #下面开始讲解具体操作,增删改查 #[]的快捷查询方式 '''print(arrser['b']) #直接根据索引查询某个值 print(arrser[0:2]) #传统的切片模式,左闭右开区间 print(arrser['a':'c']) #索引切片,和数值切片不同的是这是个整闭区间 print(arrser[[0,2]],arrser[['a','c']]) #使用列表作为索引工具,可以实现跳跃一一对应''' #基于loc[]的索引和[]的方式是一模一样的 '''print(arrser.loc['b']) # loc不能做[0:2]这样的切片 print(arrser.loc['a':'c']) print(arrser.loc[['a','c']])''' # 基于iloc的索引不需要索引,直接填位值 '''print(arrser.iloc[1]) print(arrser.iloc[0:2])#右开左闭切片 print(arrser.iloc[[0,2]])#返回列表元素对应值 #直接导出所有的值和索引,和字典的操作一样 print(arrser.index) print(arrser.values)''' #增加操作 '''arrser['h']=8 #和字典的操作一样,赋值直接增加一行 print(arrser)''' #直接增加一个series,等同于将另一个series后续拼接 '''ignore_index的含义是是否清除后续series的键然后重新生成 series和字典的区别在于其index即键是可以重复的。''' '''k=arrser.append(dictser,ignore_index=False) print(k.loc['a'])''' #删减操作用drop函数 '''print(arrser.drop('a')) print(arrser.drop(['a','c']))''' #pandas不能修改类似元组类型的索引,只能整体替换,保障一一对应的关系就好 '''arrser.index = ['h','j','k','l','y'] print(arrser) #rename函数可以以字典形式对索引进行修改 print(arrser.rename({'h':'a'}))''' #pandas可以通过键对值进行直接修改 '''arrser['b']=10 print(arrser) arrser['a':'c']=100 #还能进行多重变换 print(arrser) #replace函数可以对一个列表或单个数字进行修改,修改值只能是单一值因为要对应 print(arrser.replace(to_replace=[100,8],value = 5))''' #其他操作,对series的数据做初步统计分析 '''print(arrser.describe())''' #对series整体运算和numpy1的运算一致,直接算就可以了 print(arrser[arrser.notnull()]) #在存在空值的series中找非空值 print(arrser[arrser.isnull()]) #找空值 #填充空值 arrser = arrser.fillna(arrser.mean()) 函数内部就是填充值,为减少误差直