利用Python进行数据分析——函数部分

1 基础知识

  1. 函数使用 def 关键字声明,用 return 关键字返回值。
def my_function(x, y, z=1.5):
    if z > 1:
        return z * (x + y)
    else:
        return z / (x + y)
  1. 可以同时拥有多条return语句,如果达到函数末尾时没有遇到return,则返回None。(和c语言是不一样的)

  2. 函数可以有一些位置参数(不指定默认值)和关键字参数(指定默认值)。
    但是,关键字参数必须位于位置参数(如果有的话)之后。

my_function(5, 6, z=0.7)
my_function(3.14, 7, 3.5)
my_function(10, 20)

my_function(x=5, y=6, z=7)
my_function(y=6, x=5, z=7)

1.1 命名空间

函数可以访问两种不同作用域中的变量:全局(global)和局部(local)。

Python有一种更科学的,用于描述变量作用域的名称,即命名空间(namespace)。

任何在函数中赋值的变量,默认都是被分配到局部命名空间的。
局部命名空间是在函数被调用时创建的,函数参数会立即填入该命名空间。

  • 可以使用global关键字把函数中的参数声明为全局变量。
  • 但是不建议频繁使用global关键字,因为全局变量一般是用于存放系统的某些状态的。

1.2 返回多个值

  • 这个功能是比Java、C++ 方便太多了。需要注意的就是,在调用函数时,要返回值要和接收值一一对应。
python
def f():
    a = 5
    b = 6
    c = 7
    return a, b, c
a, b, c = f()
  • 在实际应用中,更多的用法是,函数只返回一个对象,也就是一个元组。然后再将该元组拆分到各个结果变量中。
def f():
    a = 5
    b = 6
    c = 7
    return {
    
    'a' : a, 'b' : b, 'c' : c}

return_value = f()

1.3 函数也是对象

  • 对一个复杂的字符串,对其进行数据清洗工作。
  • 需要用到内建的字符串方法和正则表达式——re模块。
In [171]: states = ['   Alabama ', 'Georgia!', 'Georgia', 'georgia', 'FlOrIda', 'south   carolina##', 'West virginia?']
   
import re
def clean_strings(strings):
    result = []
    for value in strings:
        value = value.strip()
        value = re.sub('[!#?]', '', value)
        value = value.title()
        result.append(value)
    return result

(1)strip()方法

strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
返回值:修改之后的字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。


(2)sub()方法
sub()方法用来进行查询和替换,sub()方法的格式为:
re.sub(pattern, repl, string, count=0, flags=0)

pattern:表示正则中的模式字符串;
repl:表示要替换的字符串(即匹配到pattern后替换为repl),也可以是个函数;
string:表示要被处理(查找替换)的原始字符串;
count:可选参数,表示要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会替换;
flags:可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0

(3)title()方法

title()方法的功能:将字符串中所有单词的首个字母转化为大写,其他字母均转化为小写。

【特别注意】若在字符串中遇到标点符号、空格、数字等其他非字母元素,则非字母元素后的第一个字母转化为大写,其他字母转化为小写。

在这里插入图片描述

2 一些重要函数

2.1 map() 函数

map 是 python 的内置函数,会根据提供的函数对指定的序列做映射。

map() 函数的格式是:

map(function, iterable,...)

第一个参数接受一个函数名。后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意:map函数不改变原list,而是返回一个新list。

  • 举个例子:
del square(x):
    return x ** 2
 
map(square,[1,2,3,4,5])
 
# 结果如下:
[1,4,9,16,25]
  • 当不传入function时,map()就等同于zip(),将多个列表相同位置的元素归并到一个元组中:
map(None,[2,4,6],[3,2,1])
 
# 结果如下
[(2,3),(4,2),(6,1)]

2.2 匿名函数(lambda)

Python支持一种匿名函数,这种函数仅由单条语句组成,该语句的结果就是返回值。

通过lambda关键字定义,代表“正在声明的是一个匿名函数”。

def short_function(x):
    return x * 2
    
equiv_anon = lambda x: x * 2
  • 举一个简单的例子:
def apply_to_list(some_list, f):
    return [f(x) for x in some_list]
ints = [4, 0, 1, 5, 6]
apply_to_list(ints, lambda x: x * 2)

相当于:[x *2 for x in ints]

  • 再举一个例子:
def func(x,y):
	return x+y
	
# 相当于下面的lambda
lambda x,y: x+y
  • 假设有一组字符串,你想要根据各字符串不同字母的数量对其进行排序:
In [177]: strings = ['foo', 'card', 'bar', 'aaaa', 'abab']

In [178]: strings.sort(key=lambda x: len(set(list(x))))
In [179]: strings
Out[179]: ['aaaa', 'foo', 'abab', 'bar', 'card']

2.3 list() 函数

  1. 列表 list() 方法用于将可迭代对象(字符串、列表、元祖、字典)转换为列表
T = (123, 'Google', 'Runoob', 'Taobao')
L1 = list(T)
print ("列表元素 : ", L1)
 
S="Hello World"
L2=list(S)
print ("列表元素 : ", L2)


###############################################
列表元素 :  [123, 'Google', 'Runoob', 'Taobao']
列表元素 :  ['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']

2.4 set() 函数

set() 函数创建一个无序不重复元素的集合。

可进行关系测试,删除重复数据,还可以计算交集、差集、并集等,返回新的集合对象

2.5 sort() 方法

sort(*, key=None, reverse=False)
  1. 排序是就地的、稳定的。是修改的列表本身,并且是能够保持两个相等语速的位置的。
  2. key 函数的使用:将其应用于每个列表项,并根据他们的函数值对列表进行升序或者降序排序。
  3. reverse 设置反向标志,设置为升序和降序排序。

猜你喜欢

转载自blog.csdn.net/weixin_42521185/article/details/125379814