数据分析Python基础

本文详细介绍了Python数据结构的基础知识,包括序列的概念,不可变序列的元组(创建、遍历、常用函数)和字符串(创建、常用函数及操作),可变序列的列表(创建、CRUD、遍历、列表推导式)以及其他对象如集合和字典。内容适合Python初学者巩固基础知识。
摘要由CSDN通过智能技术生成

数据分析Python基础

在这里插入图片描述
文章内容输出来源:拉钩教育数据分析训练营–直达飞机票(想了解的小伙伴)
  本人为传统行业ETL,想转行数据分析,感觉自学有点困难,之前偶然接触到拉钩教育中的1元文章,都是各领域大佬的手笔,内容质量很高,刚好拉钩也有数据分析的训练营,看了看课程安排,简单咨询了下,就报名了,现在学到了数据挖掘部分,感觉Python基础的内容有些都忘了,所以特意巩固下,才写的这篇文章





提示:以下是本篇文章正文内容,下面案例可供参考

Python数据结构

1.序列

  序列是Python中最基本的一种数据结构,指的是一个可迭代的有序的集合,序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(通过index访问),并且序列中的数据会按照添加的顺序来分配索引,然而通过序列中元素是否可以改变又分为可变序列和不可变序列.

1.1 不可变序列

1.11 元组(tuple)
①什么是元组?

  元组是一种不可变的序列,正是由于元组的对象不可变性,所以没有增删改操作,元组中可以存储不同类型的对象.

②元组的创建

操作如下:

1.使用()来创建元组
my_tup = () # 创建了一个空元组
print(my_tuple,type(my_tuple))
# result: () <class 'tuple'>
my_tuple = (1,2,3,4,5) # 创建了一个5个元素的元组
print(my_tuple,type(my_tuple))
# result: (1, 2, 3, 4, 5) <class 'tuple'>
2.元组是不可变对象,不能尝试为元组中的元素重新赋值
my_tuple[3] = 10  #注:体现了元组元素一旦添加不可修改
# result: TypeError: 'tuple' object does not support item assignment 
3.当元组不是空元组时,括号可以省略
my_tuple = 5,2,0
print(my_tuple,type(my_tuple))
# result: (5, 2, 0) <class 'tuple'>
#注意但当元组中只有一个元素时候必须在元素后加个',',否则识别为原元素的数据类型(加不加括号都可以)
my_typle =(40)
type(my_typle)
# result: int  注:结果为int类型,也就是40的类型
#正确写法
my_tuple = 40,  #等价于my_tuple = (40,)
type(my_typle)
# result: tuple 注:此时的my_tuple才是真正的元组
4.元组的解包(解构)
# 解包可以理解为就是将元组当中每一个元素都赋值给一个变量
my_typle = 4,False,28,'a'
a,b,c,d = my_tuple
print(a,b,c,d)
# result: 4 False 28 a
5.交互a 和 b的值,这时我们就可以利用元组的解包(相当方便)
#交换前
a = 5
b = 8
print(a,b)
# result: 5 8
a , b = b , a
#交换后
print(a , b)
# result:8 5
6.在对一个元组进行解包时,变量的数量必须和元组中的元素的数量一致
my_tuple = 10 , 20 , 30 , 40
m,n,x,y = my_tuple
print(m,n,x,y) 
# result: 10 20 30 40
# 也可以在变量前边添加一个*,这样变量将会获取元组中所有剩余的元素
my_tuple = 1,2,3,4,5,6
a , b , *c = my_tuple
print(a,b,c)
#result: 1 2 [3, 4, 5, 6] 注:[3, 4, 5, 6] 部分为列表(list)后面会讲到
a , *b , c = my_tuple
print(a,b,c)
# result: 1 [2, 3, 4, 5] 6
a , b , *c = 'hello world'
print(a,b,c)
# result: h e ['l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
# 不能同时出现两个或以上的*变量
*a , *b , c = 'hello world'   #两个'*'导致系统不会分配了,怕分不均打起来,它也是个老好人...
# result: SyntaxError: two starred expressions in assignmenta 注:结果报错                  
③元组的CRUD

(由于元组中元素不可变,所以就没有增删改操作,只有查询操作)

1.前面提到元组属于序列,序列的通性就有可以通过索引来访问序列中的元素(tuple,list,str)后面会陆续讲到,而且第一个元素的索引为0,最后一个元素索引为-1
my_tuple = (1,'str',False,7.8,None)
print(my_tuple[3],my_tuple[0]) #访问元组中第一个元素和第四个元素
# result: 7.8 1 
# 访问最后一个元素
print(my_tuple[-1])
# result: None
2.突然想呼应下元组元素不可修改,真的吗?有'bug'? come to see see 
my_tuple = (1,[2,'str',False],'hello')
#操作1
my_tuple[0] = 'wahaha'  #哦哦!第一个元素的确不可修改
# result: 'tuple' object does not support item assignment
#操作2
my_tuple[1][0] = 'bug'
print(my_tuple)
# result: (1, ['bug', 'str', False], 'hello') 注:what fu** ? 啥子情况哟?说好一百年不许变呢?
#看一下 my_tuple 中第二个元素[2,'str',False] 在修改前后变化
my_tuple = (1,[2,'str',False],'hello')
#修改前:id()函数:打印对象在内存中的地址,id值相同就为同一个对象
print(my_tuple,type(my_tuple[1]),id(my_tuple[1]))
# result: (1, [2, 'str', False], 'hello') <class 'list'> 2595153146560
#修改后:
my_tuple[1][0] = 'bug'
print(my_tuple,type(my_tuple[1]),id(my_tuple[1]))
# result:(1, ['bug', 'str', False], 'hello') <class 'list'> 2595153146560
'''可以看出my_tuple的第一个元素(也就是[]整体)的地址2595153146560是没变的,变化的是元素中的元素变了,这是由于[2, 'str', False]是列表,my_tuple[1][0] = 'bug'操作是将列表[2, 'str', False]中的第一个元素2给修改成了'bug',而list本身是可变的,也就是list修改元素后,原list的地址是不变的,所以再回到元组中
元素不可变的说法是没问题的'''
#也可以如下尝试,尝试将[2,'str',False]整体进行修改
my_tuple[1] = 'bug'  #再次验证tuple的元素不可变
# result: 'tuple' object does not support item assignment
④元组的遍历

什么是遍历?
个人理解为就是将对象中所有元素都拿出来瞧瞧

#遍历元组
1.方式一:for
my_tuple = ('a',True,None,1.0,5)
for i in my_tuple:
    print(i, end = ' ') #注:print(end=' ')将末尾默认字符修改为空格,默认为换行符
# result: a True None 1.0 5 注:遍历就是将元组中所有元素获取一遍 

2.方式二: while
my_tuple = ('a',True,None,1.0,5)
i = 0
while i < len(my_tuple): #相当于java中length
    print(my_tuple[i],end=' ')
    i+=1
# result: a True None 1.0 5 

3.方式三:range()
my_tuple = ('a',True,None,1.0,5)
for i in range(len(my_tuple)):
    print(my_tuple[i],end=' ')
    i+=1
# result : a True None 1.0 5  注意:熟练一种即可(哪个舒服就用哪个)
⑤元组的常用函数

说明:如何查看对象的自带方法(dir)有哪些以及方法如何使用(help)

1.查看对象拥有哪些自带方法(dir)
dir(tuple)  --查看元组有哪些自带方法(查看其他对象同理)
''' result: ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', 
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', 
'__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', 
'__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] 
注:我是小白,所以也就关注前后不带'_'的方法玩一玩了,这一看就剩count,和index方法了 '''
2.每个方法如何使用(help)
这里以元组的count()方法为例
help(tuple.count)  #查看元组的count方法如何使用(以后学习一个新方法时使用)
# result: Help on method_descriptor:
#count(self, value, /) 注:简单看就是查看目标字符在对象中的个数
#   Return number of occurrences of value. 
下面介绍下这两个方法的使用
1)count():统计出现次数
my_tuple = ('a','b','c','c','c','a',1,1,2)
print(my_tuple.count('a')) 
# result: 2   注:元组中有2个'a'
my_tuple.count(1)
# result: 2   注:元组中有2个1
2)index():查询元素第一次出现的位置,脾气暴躁(找不到就生气)
my_tuple = ('a','b','c','c','c','a',1,1,2)
my_tuple.index('b') 
# result: 1   注:字符'b'第一次出现的索引为1
print(my_tuple.index(1)) 
# result: 6   注:数字1第一次出现的索引为6(虽然7位置也有1但是结果为第一次的位置)
#找不到就生气()报错
my_tuple = ('a','b','c','c','c','a',1,1,2)
my_tuple.index('lagou')
# result: ValueError: tuple.index(x): x not in tuple 注:当前元组没有此元素
3) in /not in 判断元组中是否包含某个元素
my_tuple = ('a','b','c','c','c','a',1,1,2)
'a' in my_tuple
# result: True
'lagou' in my_tuple
# result: False
'lagou' not in my_tuple
# result: True
4)sum(),如果元组中元素都为intfloat,可以sum()直接求和 注:sum()为python自带函数
my_tuple = 1,2,3,4,5,3.7
sum(my_tuple) 
# result: 18.7
⑥练习
说明,sales中每个元组为一个销售员的姓名以及第一季度(1,2,3)的业绩
需求:求出一季度销冠(名字以及一季度业绩)
sales = (
    ("Peter", (78, 70, 65)),
    ("John", (88, 80, 85)),
    ("Tony", (90, 99, 95)),
    ("Henry", (80, 70, 55)),
    ("Mike", (95, 90, 95))
)
#1.精简前
champion = '' #销冠名字初始化为''
max = 0       #一季度最高销售额,初始化为0
for sale in sales: #遍历
    name = sale[0] #取出名字
    quarter = sale[1] #取出一季度(1,2,3月)业绩
    quarter_sales = 0 #季度总销售额
    for month_sales in quarter: #遍历每个人的一季度每个月的业绩
        quarter_sales += month_sales #对一季度每个月业绩加和
        if quarter_sales > max: #将所有销售员季度总和算出取最大的
            champion = name  #销冠姓名
            max = quarter_sales  #销冠季度业绩
print('第一季度的销售冠军是{0},总销售额为{1}万元'.format(champion,max))
# result: 第一季度的销售冠军是Tony,总销售额为284万元

# 2.精简后,简直不要太爽(代码精简)
champion = ''
max = 0
for name,quarter in sales:  #这种写法可以回想元组的解包,("Peter", (78, 70, 65))中的Perter 赋值给name,(78, 70, 65)赋值给quarter
    total = sum(quarter) #直接将一季度业绩(78, 70, 65)求和
    if total > max:
        max,champion = total,name  #解包赋值
print('第一季度的销售冠军是{0},总销售额为{1}万元'.format(champion,max))
# result: 第一季度的销售冠军是Tony,总销售额为284万元
1.12 字符串(str)
①什么是字符串?

  字符串其实也是一种序列,可以理解为一串整齐的按顺序排着队的字符,组成了字符串,那每个字符在队伍中都有自己的位置,这个位置就是下标,又叫作索引。

②字符串的创建

  还记得学习Python运行的第一个程序,也是学习每种编程语言的第一个程序,对,没错,打印hello world! 它就是个字符串.
在这里插入图片描述
操作如下:

1.创建字符串(用单引号''或者双引号""都可以,没什么区别)
my_str = 'I love Python'
print(my_str,type(my_str))
# result: I love Python <class 'str'>
my_str1 = "good good study"
print(my_str1,type(my_str1))  #看个人习惯,我比较习惯单引号
# result: good good study <class 'str'>
2.三引号(将一大段内容原样输出) --来自某道翻译,不要见怪
motto = '''   #注三引号可以是单引号,也可以是双引号
Where there is a will there is a way,
burn one's Bridges, 
the twelve Qin pass finally belongs to Chu; 
Hard days, 
three thousand more can swallow wu 
'''
# result:   print(motto)  #原样输出
#  			Where there is a will there is a way,
#   		burn one's Bridges, 
#   		the twelve Qin pass finally belongs to Chu; 
#   		Hard days, 
#   		three thousand more can swallow wu 
3.有时候定义的字符串太长一行放不下,用'\'进行连接
story = 'this is a  long long long long long \
story,a very very very ......' #虽然看着换行了但结果还是一行
print(story)
#result: this is a  long long long long long story,a very very very ......
③常用函数及操作

1.字符串的格式化输出
1)格式化占位符

占位符 描述
%d 整数占位符
%f 浮点数占位符
%.f 指定精度的浮点数占位符
%s 字符串占位符
%% 输出百分号%
操作如下:
1.%d (整数占位符)
print('北上广数据分析师的平均薪资为%dK'% 20):后面%后的20在输出时就替代了前面的%d,使得输出更加灵活
# result: 北上广数据分析师的平均薪资为20K
如果给%d 传入一个浮点数,那它会自动将它转换成整数(截断而不是四舍五入)
print('%d' % 3.1415926) 
# result: 3
print('%d' % 3.9999999)
# resutl: 3
2.%f(浮点数占位符)%.f
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值