【Python】一篇文章学习Pandas包 Pandas Series、DataFrame 对比学习

一、Series与python字典对比

Series兼并了数组和字典的功能,既可以看作是一种特殊的字典,又可以看成是通用的Numpy数组。既可以支持数组的切片操作等,还可以运用字典获取values的方法,举例:

dic={1:'beijing',2:'xiaan',3:'tianjing',4:'japan','five':'American'}
nums=[1,2,3,4,'five']
series=pd.Series(dic,index=nums)
#字典的取值方法
print('dic:',dic['five'])
print('series:',series['five'])
#数组切片
#注意结果是不包含区间左端的
print("切片结果:",series[1:3])

Series的index和字典一样都是无法更改的

  1. 两种创建Series的方法
dic={1:'beijing',2:'xiaan',3:'tianjing',4:'japan'}
nums=[1,2,3]
series=pd.Series(dic,index=nums)
series1=pd.Series(['a','b','c'],index=[1,2,3])
print("values:"," ".join(series.values))
print(series1)

values: beijing xiaan tianjing
1    a
2    b
3    c
dtype: object
  1. Series数据提取
    Series当作一维数组看时,花哨的索引数据选择法
dic=1:'beijing',2:'xiaan',3:'tianjing',4:'japan','five':'American','six':'Tailand','seven':'Korea'}
nums=[1,2,3,4,'five','six','seven']
series=pd.Series(dic,index=nums)
#混合索引 数组取值
print("混合索引 数组取值:",series[[2,'five']])
#混合索引 数组切片 报错 不能不同类型的索引类型混合切片
# print("切片结果:",series[2:'old'])
混合索引 数组取值: 2          xiaan
five    American
dtype: object

用隐式索引和显示索引两种切片

#数组切片--隐式索引
#注意结果是不包含区间左端的
print("切片结果:",series[1:3])
#数组切片 --显式索引
print("切片结果2:",series['five':'seven'])

切片结果: 2       xiaan
3    tianjing
dtype: object
切片结果2: five     American
six       Tailand
seven       Korea
  1. 两种索引器
import pandas as pd
#索引器
data = pd.Series({1:'Zames',2:'Jack',3:'Marry',4:'Jess'})
#取值和切片都是显式的
print(data.loc[1])
print(data.loc[1:3])
#取值和切片都是隐式的
print(data.iloc[1])
print(data.iloc[1:3])

这里显式和隐式的区分在于:Series打印出来它的列索引所显示的就是显式定义的索引,而数组比如[1,2,3,4,5,6]索引相当于【0,1,2,3,4,5】,相对来说就是隐式定义的索引了。loc针对显式的索引,即索引的数字是在Series对象中显式定义的。

二、DataFrame与其他数据类型对比

DataFrame可以看作同时拥有灵活的行索引和列名的二维数组,也可以看作是有序排列的Series对象,还可以看成一系列键(即列属性) 映射一个Series数据的字典。
举例如下

#建立
import pandas as pd
num_stu=pd.Series([1001,1002,1003,1004,1024,1025],index=['Zames','Jess','Lily','Poter','Lupin','Jupyter'])
nn_stu=pd.Series(['tank','Bear','mum','dad','fri','plat'],index=['Zames','Jess','Lily','Poter','Lupin','Jupyter'])
stu=pd.DataFrame({'num':num_stu,'nn':nn_stu})#括号内用的是字典方法建立DataFrame
stu

在这里插入图片描述
DataFrame的索引是无名的,而其他列都可以在创建时设定名称,使用index获取;而其他列使用columns获取,返回的都是Index对象

print(stu.index)
print(stu.columns)
Index(['Zames', 'Jess', 'Lily', 'Poter', 'Lupin', 'Jupyter'], dtype='object')
Index(['num', 'nn'], dtype='object')
  1. DataFrame的创建
    (1)使用元素为字典的列表建立
    (2)Series对象:单个Series对象建立
num_stu=pd.Series([1001,1002,1003,1004,1024,1025],index=['Zames','Jess','Lily','Poter','Lupin','Jupyter'])
stu=pd.DataFrame(num_stu,columns=['num'])#单个Series对象建立,直接设定columns name

通过Series为values的字典建立

num_stu=pd.Series([1001,1002,1003,1004,1024,1025],index=['Zames','Jess','Lily','Poter','Lupin','Jupyter'])
nn_stu=pd.Series(['tank','Bear','mum','dad','fri','plat'],index=['Zames','Jess','Lily','Poter','Lupin','Jupyter'])
stu=pd.DataFrame({'num':num_stu,'nn':nn_stu})
#values为Series对象的字典可以用于创建DataFrame

(3)Numpy数组ndarray建立:通过ndarray的二维数组建立,使用DataFrame方法时设立columns name&index name;结构化数组建立
我理解的是,结构化数组就是数组不仅可以按照行索引,列也是有名称可以被索引的。

#建立结构化数组
import numpy as np
teacher_name = ['Zames','Manchester','Li','Jyx']
teacher_age  = [30,29,28,27]
teacher_marriage=['F','T','F','T']
teachers=np.zeros(4,dtype={'names':('name','age','marriage'),'formats':('U10','i4','U2')})
teachers['name']=teacher_name#要记得用单引号
teachers['age']=teacher_age
teachers['marriage']=teacher_marriage
#建立DataFrame
pd.DataFrame(teachers)

(4)外源数据创建
read_table(‘文件路径’,(sep=’\t’(表示文件中字段间分隔符为TAB)),(header=None(表示默认没有列名,header=0则表示第0行为列名))
read_csv(‘file_path’,header=None,sep=’\t’)

  1. DataFrame数据选取
    (1)字典式的索引方法获取列数据
#与字典相似的列索引
teacher['name']

0         Zames
1    Manchester
2            Li
3           Jyx
Name: name, dtype: object

用这个方法也可以给DataFrame对象增加新列

teacher['new']=pd.Series([0,1,2,3],index=[0,1,2,3])
teacher[['new','name']]
	new	name
0	0 	Zames 
1	1 	Manchester 
2	2 	Li 
3	3 	Jyx 

(2)字典式的方法获取单行数据

teacher.values[0]
array(['Zames', 30, 'F', 0], dtype=object)

对比以上两种不同的索引方法,一种是获取行数据和,一种是获取列数据的
(3)三种索引器

print(teacher)
print(teacher.loc[:"Li",:'age'])#显式 columns_names
print(teacher.iloc[:3,:2])#隐式 数字
print(teacher.ix[:2,:'age'])#混合使用

         name  age marriage  new
0       Zames   30        F    0
1  Manchester   29        T    1
2          Li   28        F    2
3         Jyx   27        T    3

         name  age
0       Zames   30
1  Manchester   29
2          Li   28
3         Jyx   27

         name  age
0       Zames   30
1  Manchester   29
2          Li   28

         name  age
0       Zames   30
1  Manchester   29
2          Li   28
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值