python 期末复习笔记(持续更新)(上)

简介: set 是一个不允许内容重复的组合,而且set里的内容位置是随意的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

1、set



set 是一个不允许内容重复的组合,而且set里的内容位置是随意的,所以不能用索引列出。可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

745237efe71f48e9adb4f217fb7744c7.png


创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

6ab7d8ed650f491882ecbe420f233ae4.png


2、arange和range



【1】range(start, end, step)

返回一个list对象也就是range.object,起始值为start,终止值为end,但不含终止值,步长为step。只能创建int型list。

range()函数的三种使用方法:

# range()函数的三种使用方法
# 1.仅设置终点参数,默认起点为0,步长为1,返回值范围为[起点,终点)
>>>range(10)
0,1,2,3,4,5,6,7,8,9
# 2.设置起点和终点,步长默认为1,返回值范围为[起点,终点)
>>>range(2,10)
2,3,4,5,6,7,8,9
# 3.设置起点、终点和步长
>>>range(1,10,2)
1,3,5,7,9
# 当设置起点、终点或步长为小数时,将会报错
>>>range(1,10,2.1)
TypeError: 'float' object cannot be interpreted as an integer

【2】arange(start, end, step)

与range()类似,也不含终止值。但是返回一个array对象。需要导入numpy模块(import numpy as np或者from numpy import*),并且arange可以使用float型数据。


43891e39eaa14526ab2be211bb0ad04b.png

np.arange()函数的整数型参数设置:

# np.arange()函数的整数型参数设置
# 1.仅设置终点参数,默认起点为0,步长为1,返回值范围为[起点,终点)
>>>np.arange(10)
0,1,2,3,4,5,6,7,8,9
# 2.设置起点和终点,步长默认为1,返回值范围为[起点,终点)
>>>np.arange(2,10)
2,3,4,5,6,7,8,9
# 3.设置起点、终点和步长
>>>np.arange(1,10,2)
1,3,5,7,9

np.arange()函数的小数型参数设置:

# np.arange()函数的整数型参数设置
# 1.终点为小数,默认起点为0.0,步长为1.0
>>>np.arange(10.2)
0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0
# 2.设置起点和终点均为小数,步长默认为1.0,返回值范围为[起点,终点)
>>>np.arange(2.1, 5.1)
2.1,3.1,4.1
# 3.设置起点、终点和步长均为小数
>>>np.arange(1.1, 5.2, 1.1)
1.1,2.2,3.3,4.4
4d2bdac618e4411eb35da88f788e9816.png


range函数和arange函数的区别:

【1】range是Python内置的函数,直接调用即可;arange是numpy中的函数,调用时一般采用np.arange()。

【2】range()函数仅支持整数步长,np.arange()函数支持小数步长。

image.png

【3】两者数据类型不同:range()函数返回的类型为range对象,np.arange()函数返回的类型为array类型对象。


3、Python 三种取随机数方法




三种方法

  1. random.sample()
  2. random.choice()
  3. random.randint()

random.sample

语法:

random.sample(list, N)

【1】list: 一个数组,可以是元素数组,也可以是其他的数组。比如: numbers=[1,2,3,4,5]

【2】N: 从数组中随机取出N个

c9356157e5f74efd9ebffd073a2b64d5.png

random.choice

语法:

random.choice(list)

3f5c01cdfbcf4216b061997dd30c408e.png

random.randint

语法:

random.randint(N, M)

N: 起始数

M: 终止数

从N到M随机取出一个数

fa9568a88f4c4789a3d5ed1ab1f2b5e8.png


2、union



union 取并集,效果等同于 | ,重复元素只会出现一次,但是括号里可以是 list,tuple, 甚至是 dict

3201e8aca26049c1b685c04eb867c82d.pnge256237340be4977a9dad595175ff453.png

同样uninon也不能用索引列出:
#TypeError: 'set' object is not subscriptable  
#表示把不具有下标操作的集合对象用成了对象[i]
genres_list=set() # 获取所有的电影风格
for i in moviesdf['genresls'].str.split(' '):
    genres_list=set().union(i,genres_list)
 # 集合(set)是一个无序的不重复元素序列。可以使用大括号 { } 或者 set() 函数创建集合。
    genres_list=list(genres_list)
    genres_list
genres_list.remove('') # 去除空的元素
print(genres_list)

得到的结果:所有电影风格类型

['Movie', 'Documentary', 'Comedy', 'Crime', 'Fantasy', 'History', 'Drama', 'Horror', 'Action', 'War', 'Foreign', 'Thriller', 'Fiction', 'Animation', 'Science', 'Music', 'Western', 'Romance', 'Family', 'TV', 'Mystery', 'Adventure']

3db9dbf142eb48d3ad4928272b702a84.png

例子一:

baf25de7d6894fb9bf52a74209ff1495.png


例子二:

bca61ba9ddd14214b891be466d970f82.png3cfd251d656444a8bea5f207f26c3d43.png


4、ascending=False 与 reverse=False



ascending与reverse刚好是相反的

ascending=False:降序

ascending=True:升序

reverse=False:升序

reverse=True:降序

b8f1896b01d74bf480fc0c4befff6463.png

c350918bdbbf49088e28efe9109d689b.png

a127353403604b38866d2e522a9c4d09.png

9bd34e63d9804ac9bd11c11eefa249d9.png


5、set_index和reset_index



set_index( ) 将 DataFrame 中的指定的列转化为行索引。


set_index( ) 将 DataFrame 中的列转化为行索引。

keys : 要设置为索引的列名(如有多个应放在一个列表里)

drop : 将设置为索引的列删除,默认为True

append : 是否将新的索引追加到原索引后(即是否保留原索引),默认为False

inplace : 是否在原DataFrame上修改,默认为False

verify_integrity : 是否检查索引有无重复,默认为False

import pandas as pd
data = pd.DataFrame([['Alice', 'Math', 93], ['Bob', 'Physics', 98], ['Chris', 'Chemistry', 96], ['David', 'Biology', 90]],
                    columns=['Name', 'Subject', 'Score'])
print(data)
print('\n')
data1 = data.set_index(keys='Name')
print(data1)

d264a9392aab430e9ec7a1f6a9c9c4f0.png557cce72fa6f41fbb4900331d4acdb56.png

reset_index可以还原索引,从新变为默认的整型索引


6、json自定义函数提取数据



#对于json格式的数据进行分割提取,通过自定义函数
def decode(column):
    z=[]
    for i in column:
        z.append(i['name'])
    return ' '.join(z) 
# 获取dict中第一个元素的name值
def decode1(column):
    z=[]
    for i in column:
        z.append(i['name'])
    return ''.join(z[0:1])  #切片,只输出第一个分隔
# 获取演员列表,中间使用逗号分隔
def decodeactors(column):
    z=[]
    for i in column:
        z.append(i['name'])
    return ','.join(z)  #切片,只输出第一个分隔
# 获取演员列表的前两位
def decode2(column):
    z=[]
    for i in column:
        z.append(i['name'])
    return ','.join(z[0:2])  #切片,只输出第一个分隔
# 获取电影风格数据
moviesdf['genresls']=moviesdf['genreslist'].apply(decode)
# 获取演员列表
moviesdf['actorsls']=moviesdf['castlist'].apply(decodeactors)
# 获取前两位演员
moviesdf['actorsn0102']=moviesdf['castlist'].apply(decode2)
# 获取第一位演员
moviesdf['actorsn01']=moviesdf['castlist'].apply(decode1)
# 获取制片的第一个国家或者地区
moviesdf['region']=moviesdf['countries'].apply(decode1)

7、apply 与lambda



apply通常与lambda一起使用

lambda原型为:lambda 参数:操作(参数)

lambda函数也叫匿名函数,即没有具体名称的函数,它允许快速定义单行函数,可以用在任何需要函数的地方。这区别于def定义的函数。

lambda与def的区别:


1)def创建的方法是有名称的,而lambda没有。


2)lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名)。


3)lambda只是一个表达式,而def则是一个语句。


4)lambda表达式后面,只能有一个表达式,def则可以有多个。


5)像if或for或print等语句不能用于lambda中,def可以。


6)lambda一般用来定义简单的函数,而def可以定义复杂的函数。

#单个参数的:
g = lambda x : x ** 2
print g(3)
"""
9
"""
#多个参数的:
g = lambda x, y, z : (x + y) ** z
print g(1,2,2)
"""
9
"""

例子二:

# 将一个 list 里的每个元素都平方:
map( lambda x: x*x, [y for y in range(10)] )

这个写法要好过:

def sq(x):
    return x * x
map(sq, [y for y in range(10)])


8、join



Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

语法:

str.join(sequence)

sequence – 要连接的元素序列。

返回通过指定字符连接序列中元素后生成的新字符串。

85c7dc29cea3492a87affb1072d945a9.png


9、copy



这里将的是copy在数组切片当中的应用:数组的切片返回的是原始数组的视图,并不会产生新的数据,这就意味着在视图上的操作会使原数组发生改变。因此如果需要的并非原始图,而是复制数据,则可以通过copy的方式实现。

arr1=arr[04:-1].copy()

9、len

len函数返回对象的长度。 通常,len函数与序列(字符串, 元组 )和集合( dict , set )一起使用以获取项数。

a934c79504184a578af41fe325902ccd.png


9、append



a.append(b):是将b原封不动的追加到a的末尾上,会改变a的值,其中,b可为列表、元组、字符串、一串数/字符/字符串

【1】列表

a = [1,2,3]
b = [4,5]
a.append(b)
print(a)   #输出:[1, 2, 3, [4, 5]]

【2】元组

a = [1,2,3]
b = (4,5)
a.append(b)
print(a)   #输出:[1, 2, 3, (4, 5)]

【3】字符串

a = [1,2,3]
b = 'string'
a.append(b)
print(a)   #输出:[1, 2, 3, 'string']

【4】一串数或者字符或者字符串

如果是一串数或者字符或者字符串,则会将b转化成元组追加到a的末尾

# b是一串数字
a = [1,2,3]
b = 4,5
a.append(b)
print(a)   #输出:[1, 2, 3, (4, 5)]
# b是一串字符
a = [1,2,3]
b = 'l','a','n'
a.append(b)
print(a)   #输出:[1, 2, 3, ('l', 'a', 'n')]
# b是一串字符串
a = [1,2,3]
b = 'lan','tian'
a.append(b)
print(a)   #输出:[1, 2, 3, ('lan', 'tian')]

append和join的区别


# coding=utf-8
#append
# append是list(列表)的方法,函数参数是可以是任意一个元素,
#作用是在列表的最后添加上这个新元素。例如a=[1,2,3]则
# a.append(4)以后a就是[1,2,3,4]
a = [1,2,3]
print a
a.append(4)
print a
#join
# join是string(字符串)的方法,函数参数是一个由字符串组成的列表比如['a','b','c'],
#作用是用字符串把这个字符串列表里的字符串连接起来,比如:
# a='-'
# 则a.join(['a','b','c'])='a-b-c'
a = ["hello","world","!"]
#用' '隔开
b = ' '
print b.join(a)
#结果:hello world ! 
#用':'隔开
print ':'.join(a)
# 结果:hello:world:!


10、merge



pandas.merge的报错:MergeError: No common columns to perform merge on.

原因:没有共同的列来进行融合,则会报错

因为merge函数默认需要提供相同的列来进行融合,如果没有的话可以通过设置left_indexright_index=True来融合所有的列

解决:指定让两个df的索引相同来进行融合df.merge(s,left_index=True,right_index=True)

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

left: 拼接的左侧DataFrame对象

right: 拼接的右侧DataFrame对象

on: 用于连接的列名。 必须在左侧和右侧DataFrame对象中找到。 如果未传递且left_index和right_index为False,则DataFrame中的列的交集将被推断为连接键。

left_on:左侧DataFrame中用于连接键的列。

right_on: 左侧DataFrame中用于连接键的列。

left_index: 左侧DataFrame中行索引作为连接键

right_index: 右侧DataFrame中行索引作为连接键

how: 有五种参数(inner,left,right,outer,cross) 默认inner。inner是取交集,outer取并集。left是包含左边的全部数据,如果右边没有相应的数据则使用NAN填充。right是包含右边的全部数据,如果左边没有则使用NAN值填充。cross表示将左右两个DataFrame进行笛卡尔积。两个数据框的数据交叉匹配,行数为两者相乘,列数为两者相加。

sort: 按字典顺序通过连接键对结果DataFrame进行排序。 默认为True,设置为False将在很多情况下显着提高性能。

suffixes: 修改重复列名。(可指定我们自己想要的后缀)

import pandas as pd 
price=pd.DataFrame({'fruit':['apple','grape','orange','orange'],'price':[8,7,9,11]})
amount=pd.DataFrame({'fruit':['apple','grape','orange','banana'],'amount':[1,2,2,3]})
display(price,amount,pd.merge(price,amount))

image.png

pd.merge(price,amount)等价于pd.merge(price,amount,on='fruit',how='inner')

image.png

import pandas as pd
df1=pd.DataFrame({'name1':['小1','小2','小3','小4'],'age':[25,28,39,35]})
df2=pd.DataFrame({'name2':['小1','小2','小4'],'score':[70,60,90]})
display(df1,df2,pd.merge(df1,df2))

上面这段代码报错:

原因在于df1使用的是name1,df2使用的是name2。两张表当中没有相同的字段。这种情况下就必须指定left_on,和right_on。

MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False

66521d4fcc48496fb45b4fc8bfd2a00f.pnge40996880e3a4e3189e231f3aab635c5.png1c25d7f773144a57aaa7ec840fe73228.png6559b566895d469d93d648fb25675cbb.png9644dcac1c504eebb52d1a3c33a1060a.pngac866fedf0994f08979f9812a4c99b87.png3e3fa443565149c18ea4f6f56fab1b7b.png502ea1297db444fa9b331b386dbeb81e.png


11、combine_first



2c9fc7281feb42769799400885b2c594.png

如上图是S5和S6,两者存在重复的索引f和g,此时使用merge和concat都无法正确的合并,因此使用combine_first。

4c0d1da9c33c411ba2465968d47fe071.pnga7f4dbe52fd54105ac6e2ba40f2059de.png

如上图combine_first可以去除重复的索引值,原因在于s5.combine_first(s6)表示的是使用s6去填充s5的缺失值。


相关文章
|
1月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
21 3
|
1月前
|
存储 开发工具 Python
【Python项目】外星人入侵项目笔记
【Python项目】外星人入侵项目笔记
38 3
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
42 0
【免费分享编程笔记】Python学习笔记(二)
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
15 0
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
13 0
|
1月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
11 0
|
1月前
|
并行计算 Python
Python错误笔记(一):CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up env
这篇文章讨论了CUDA初始化时出现的未知错误及其解决方案,包括重启系统和安装nvidia-modprobe。
135 0
|
1月前
|
索引 Python
【免费分享编程笔记】Python学习笔记(一)
【免费分享编程笔记】Python学习笔记(一)
38 0
|
3月前
|
Python
【python】】Python 的 queue 模块使用笔记
【python】】Python 的 queue 模块使用笔记
41 0
|
3月前
|
Python
Python笔记9 类
本文是作者的Python复习笔记第九篇,深入探讨了Python中的类和面向对象编程。文中详细解释了如何创建类、实例化对象、定义和使用类方法,以及类的继承、重写方法和嵌套类的使用。此外,还讨论了类模块的导入和导出,包括处理类之间的依赖关系。通过示例代码,文章展示了类在Python编程中的应用和重要性。
28 0
下一篇
无影云桌面