本文目录一览:
利用Python进行数据分析-读书笔记(3)
pandas专门为处理表格和混杂数据设计
import pandas as pd
from pandas import Series,DataFrame
Series 类似于一维数组+索引
data = pd.Series([1,2,3,4,5]) 生成Series数据
data.values data.index
pd.Series([1,2],index = ['a','b']) 设置索引
data['a'] 通过索引选取Series中单个或一组值
data[data%2==0] 进行类似numpy数组的运算index仍会保留
'a' in data
pd.Series(python字典) 可以通过python字典创建Series
可以通过设置index改变Series元素顺序
缺失值用NaN表示
pd.isnull(data) 检测缺失数据
pd.notnull
data1 + data2 可以根据索引自动对齐数据进行运算,类似join操作
data.name data.index.name 可赋值
index可以通过赋值方式修改
pd.DataFrame(XXX)传入元素为等长列表或np数组组成的字典可以生成DataFrame数据,字典key值为列名
frame.head() 前五行
pd.DataFrame(XXX, columns = [xxx], index = [xxxxx]) 可能产生NaN
frame['a'] 取列名为a的一列数据 等价于 frame.a(此时a需要是合理的变量名) 可以以列表形式取多列数据 返回的Series序列索引与原DataFrame相同
frame.loc[0] 行选取
可以用一个Series/值对某列赋值,需要长度相等
对不存在的列赋值可创建新列
del frame[列名] 删除列
通过索引方式返回数据视图,修改此返回数据也会影响源数据,Series.copy()可以创建副本
嵌套字典传给DataFrame,外层字典的键作为列名,内层键作为行索引
frame.T 转置
frame.reindex(新索引列表) 根据新索引重排,若索引值当前不存在则NaN
列可以用columns关键字重新索引
obj3 = pd.Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
obj3.reindex(range(6), method='ffill') ffill实现前向值填充
reindex可以修改(行)索引和列。只传递一个序列时,会重新索引结果的行,列可以用columns关键字重新索引
Series索引
series(索引列表/数值范围切片) 选取对应元素
Python笔记:Python装饰器
装饰器是通过装饰器函数修改原函数的一些功能而不需要修改原函数,在很多场景可以用到它,比如① 执行某个测试用例之前,判断是否需要登录或者执行某些特定操作;② 统计某个函数的执行时间;③ 判断输入合法性等。合理使用装饰器可以极大地提高程序的可读性以及运行效率。本文将介绍Python装饰器的使用方法。
python装饰器可以定义如下:
输出:
python解释器将test_decorator函数作为参数传递给my_decorator函数,并指向了内部函数 wrapper(),内部函数 wrapper() 又会调用原函数 test_decorator(),所以decorator()的执行会先打印'this is wrapper',然后打印'hello world', test_decorator()执行完成后,打印 'bye' ,*args和**kwargs,表示接受任意数量和类型的参数。
装饰器 my_decorator() 把真正需要执行的函数 test_decorator() 包裹在其中,并且改变了它的行为,但是原函数 test_decorator() 不变。
一般使用如下形式使用装饰器:
@my_decorator就相当于 decorator = my_decorator(test_decorator) 语句。
内置装饰器@functools.wrap可用于保留原函数的元信息(将原函数的元信息,拷贝到对应的装饰器函数里)。先来看看没有使用functools的情况:
输出:
从上面的输出可以看出test_decorator() 函数被装饰以后元信息被wrapper() 函数取代了,可以使用@functools.wrap装饰器保留原函数的元信息:
输出:
装饰器可以接受自定义参数。比如定义一个参数来设置装饰器内部函数的执行次数:
输出:
Python 支持多个装饰器嵌套:
装饰的过程:
顺序从里到外:
test_decorator('hello world') 执行顺序和装饰的过程相反。
输出:
类也可以作为装饰器,类装饰器主要依赖__call__()方法,是python中所有能被调用的对象具有的内置方法(python魔术方法),每当调用一个类的实例时,__call__()就会被执行一次。
下面的类装饰器实现统计函数执行次数:
输出:
下面介绍两种装饰器使用场景
统计函数执行所花费的时间
输出:
在使用某些web服务时,需要先判断用户是否登录,如果没有登录就跳转到登录页面或者提示用户登录:
--THE END--
Python笔记:命令行参数解析
有些时候我们需要通过命令行将参数传递给脚本,C语言中有个getopt()方法,python中也有个类似的命令行参数解析方法getopt()。python也提供了比getopt()更简洁的argparse方法。另外,sys模块也可以实现简单的参数解析,本文将对这3种命令行参数解析方法简要介绍。
sys.argv是传入的参数列表,sys.argv[0]是当前python脚本的名称,sys.argv[1]表示第一个参数,以此类推。
命令行运行:
可以看到传入的参数通过sys.argv来获取,它就是一个参数列表。
python的getopt与C语言的的getopt()函数类似。相比于sys模块,支持长参数和短参数,并对参数解析赋值。但它需要结合sys模块进行参数解析,语法格式如下:
短参数为单个英文字母,如果必须赋值需要在后面加英文冒号( : ),长参数一般为字符串(相比短参数,更能说明参数含义),如果必须赋值需要在后面加等号( = )。
命令行运行:
注意:短参数(options)和长参数(long_options)不需要一一对应,可以任意顺序,也可以只有短参数或者只有长参数。
argparse模块提供了很多可以设置的参数,例如参数的默认值,帮助消息,参数的数据类型等。argparse类主要包括ArgumentParser、add_argument和parse_args三个方法。
下面介绍这三个函数的使用方法。
argparse默认提供了 -h | --help 参数:
命令行运行:
下面列出部分参数:
下面来添加参数:
命令行运行:
parse_args() 方法用于解析参数,在前面的示例代码中使用parse_args方法来提取参数值,对于无效或者错误的参数会打印错误信息和帮助信息:
命令行运行:
本文介绍了Python的三种命令行参数解析方法sys.argv、getopt和argparse,可以根据自己的需要进行选择,getopt和argparse两种方法相比来说,建议选择argparse,代码量更少更简洁。更详细的使用方法参考官方文档:
--THE END--