IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 利用python进行数据分析第二版学习笔记 -> 正文阅读

[Python知识库]利用python进行数据分析第二版学习笔记

行话:

数据规整(Munge/Munging/Wrangling) 指的是将非结构化和(或)散乱数据处理为结构化或整洁形式的整个过程。这几个词已经悄悄成为当今数据黑客们的行话了。Munge这个词跟Lunge押韵。
伪码(Pseudocode) 算法或过程的“代码式”描述,而这些代码本身并不是实际有效的源代码。
语法糖(Syntactic sugar) 这是一种编程语法,它并不会带来新的特性,但却能使代码更易读、更易写。

Python的对象通常都有属性(其它存储在对象内部的Python对象)和方法(对象的附属函数可以访问对象的内部数据)。可以用 obj.attribute_name 访问属性和方法:

你可以用continue使for循环提前,跳过剩下的部分。看下面这个例子,将一个列表中的整数相加,跳过None:

sequence = [1, 2, None, 4, None, 5]
total = 0
for value in sequence:
if value is None:
continue
total += value

可以用 break 跳出for循环。下面的代码将各元素相加,直到遇到5:

sequence = [1, 2, 0, 4, 6, 5, 2, 1]
total_until_5 = 0
for value in sequence:
if value == 5:
break
total_until_5 += value

break只中断for循环的最内层,其余的for循环仍会运行:
在这里插入图片描述

While循环

while循环指定了条件和代码,当条件为False或用break退出循环,代码才会退出:

三元表达式

Python中的三元表达式可以将if-else语句放到一行里。语法如下:

value = true-expr if condition else false-expr

和if-else一样,只有一个表达式会被执行。因此,三元表达式中的if和else可以包含大量的计算,但只有True的分支会被执行。因此,三元表达式中的if和else可以包含大量的计算,但只有True的分支会被执行。

虽然使用三元表达式可以压缩代码,但会降低代码可读性。

第 3 章 Python 的数据结构、函数和文件

数据的结构和序列

元组,列表,字典,集合
用tuple可以将任意序列或迭代器转换成元组:

In [1]: tuple([4,0.2])
Out[1]: (4, 0.2)

In [2]: tuple(["string"])
Out[2]: ('string',)

In [3]: tuple("string")
Out[3]: ('s', 't', 'r', 'i', 'n', 'g')

拆分元组

如果你想将元组赋值给类似元组的变量,Python会试图拆分等号右边的值:
使用这个功能,你可以很容易地替换变量的名字,其它语言可能是这样:

tmp = a
a = b
b = tmp
In [4]: a,b = 1,2

In [5]: a
Out[5]: 1

In [6]: b
Out[6]: 2

In [7]: b,a = a,b

In [8]: a
Out[8]: 2

In [9]: b
Out[9]: 1

变量拆分常用来迭代元组或列表序列:

In [10]: seq = [(1, 2, 3), (4, 5, 6), (7, 8, 9)]

In [11]: for a, b, c in seq:
    ...:     print('a={0}, b={1}, c={2}'.format(a, b, c))
    ...:
a=1, b=2, c=3
a=4, b=5, c=6
a=7, b=8, c=9

另一个常见用法是从函数返回多个值。后面会详解。
Python最近新增了更多高级的元组拆分功能,允许从元组的开头“摘取”几个元素。它使用了特殊的语法 *rest ,这也用在函数签名中以抓取任意长度列表的位置参数:

In [29]: values = 1, 2, 3, 4, 5
In [30]: a, b, *rest = values
In [31]: a, b
Out[31]: (1, 2)
In [32]: rest
Out[32]: [3, 4, 5]

rest 的部分是想要舍弃的部分,rest的名字不重要。作为惯用写法,许多Python
程序员会将不需要的变量使用下划线:

In [33]: a, b, *_ = values

tuple方法:
因为元组的大小和内容不能修改,它的实例方法都很轻量。其中一个很有用的就是 count (也适用于列表),它可以统计某个值得出现频率:

In [34]: a = (1, 2, 2, 2, 3, 4, 2)
In [35]: a.count(2)
Out[35]: 4

列表

可以用append在列表末尾添加元素

In [45]: b_list.append('dwarf')
In [46]: b_list
Out[46]: ['foo', 'peekaboo', 'baz', 'dwarf']

在列表中检查是否存在某个值远比字典和集合速度慢,因为Python是线性搜索列表中的值,但在字典和集合中,在同样的时间内还可以检查其它项(基于哈希表)。

排序

你可以用 sort 函数将一个列表原地排序(不创建新的对象):

In [61]: a = [7, 2, 5, 1, 3]
In [62]: a.sort()
In [63]: a
Out[63]: [1, 2, 3, 5, 7]

另还有二级排序key

一个聪明的方法是使用 -1 ,它可以将列表或元组颠倒过来:

In [82]: seq[::-1]
Out[82]: [1, 0, 6, 5, 3, 6, 3, 2, 7]

序列函数

Python有一些有用的序列函数。
enumerate函数
迭代一个序列时,你可能想跟踪当前项的序号

for i, value in enumerate(collection):
# do something with value

sorted函数
sorted 函数可以从任意序列的元素返回一个新的排好序的列表:

In [87]: sorted([7, 1, 2, 6, 0, 3, 2])
Out[87]: [0, 1, 2, 2, 3, 6, 7]
In [88]: sorted('horse race')
Out[88]: [' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']

zip函数
zip 可以将多个列表、元组或其它序列成对组合成一个元组列表:

In [89]: seq1 = ['foo', 'bar', 'baz']
In [90]: seq2 = ['one', 'two', 'three']
In [91]: zipped = zip(seq1, seq2)
In [92]: list(zipped)
Out[92]: [('foo', 'one'), ('bar', 'two'), ('baz', 'three')]

zip 可以处理任意多的序列,元素的个数取决于最短的序列:

In [93]: seq3 = [False, True]
In [94]: list(zip(seq1, seq2, seq3))
Out[94]: [('foo', 'one', False), ('bar', 'two', True)]

zip 的常见用法之一是同时迭代多个序列,可能结合 enumerate 使用:

In [95]: for i, (a, b) in enumerate(zip(seq1, seq2)):
....: print('{0}: {1}, {2}'.format(i, a, b))
....:
0: foo, one
1: bar, two
2: baz, three

给出一个“被压缩的”序列, zip 可以被用来解压序列。也可以当作把行的列表转换
为列的列表。这个方法看起来有点神奇:

In [96]: pitchers = [('Nolan', 'Ryan'), ('Roger', 'Clemens'),
....: ('Schilling', 'Curt')]
In [97]: first_names, last_names = zip(*pitchers)
In [98]: first_names
Out[98]: ('Nolan', 'Roger', 'Schilling')
In [99]: last_names
Out[99]: ('Ryan', 'Clemens', 'Curt')

reversed函数
reversed 可以从后向前迭代一个序列:

In [100]: list(reversed(range(10)))
Out[100]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

要记住 reversed 是一个生成器(后面详细介绍),只有实体化(即列表或for循环)之后才能创建翻转的序列。

字典

字典可能是Python最为重要的数据结构。它更为常见的名字是哈希映射或关联数组。它是键值对的大小可变集合,键和值都是Python对象。创建字典的方法之一是使用尖括号,用冒号分隔键和值:
默认值
下面的逻辑很常见:

if key in some_dict:
value = some_dict[key]
else:
value = default_value

因此,dict的方法get和pop可以取默认值进行返回,上面的if-else语句可以简写成下面

value = some_dict.get(key, default_value)

get默认会返回None,如果不存在键,pop会抛出一个例外。关于设定值,常见的情况是在字典的值是属于其它集合,如列表。例如,你可以通过首字母,将一个列表中的单词分类:

In [123]: words = ['apple', 'bat', 'bar', 'atom', 'book']
In [124]: by_letter = {}
In [125]: for word in words:
.....: letter = word[0]
.....: if letter not in by_letter:
.....: by_letter[letter] = [word]
.....: else:
.....: by_letter[letter].append(word)
.....:
In [126]: by_letter
Out[126]: {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']}

setdefault 方法就正是干这个的。前面的for循环可以改写为:

for word in words:
letter = word[0]
by_letter.setdefault(letter, []).append(word)

collections 模块有一个很有用的类, defaultdict ,它可以进一步简化上面。传递类型或函数以生成每个位置的默认值:

from collections import defaultdict
by_letter = defaultdict(list)
for word in words:
by_letter[word[0]].append(word)

有效的键类型
字典的值可以是任意Python对象,而键通常是不可变的标量类型(整数、浮点型、字符串)或元组(元组中的对象必须是不可变的)。这被称为“可哈希性”。可以用 hash 函数检测一个对象是否是可哈希的(可被用作字典的键):

In [127]: hash('string')
Out[127]: 5023931463650008331
In [128]: hash((1, 2, (2, 3)))
Out[128]: 1097636502276347782
In [129]: hash((1, 2, [2, 3])) # fails because lists are mutable
----------------------------------------------------------------
-----------
TypeError Traceback (most recent
call last)
<ipython-input-129-800cd14ba8be> in <module>()
----> 1 hash((1, 2, [2, 3])) # fails because lists are mutable
TypeError: unhashable type: 'list'

要用列表当做键,一种方法是将列表转化为元组,只要内部元素可以被哈希,它也
就可以被哈希:

In [130]: d = {}
In [131]: d[tuple([1, 2, 3])] = 5
In [132]: d
Out[132]: {(1, 2, 3): 5}

列表、集合和字典推导式
列表推导式是Python最受喜爱的特性之一。它允许用户方便的从一个集合过滤元素,形成列表,在传递参数的过程中还可以修改元素。形式如下:

[expr for val in collection if condition]
In [154]: strings = ['a', 'as', 'bat', 'car', 'dove', 'python']
In [155]: [x.upper() for x in strings if len(x) > 2]
Out[155]: ['BAT', 'CAR', 'DOVE', 'PYTHON']

用相似的方法,还可以推导集合和字典。字典的推导式如下所示:

dict_comp = {key-expr : value-expr for value in collection if condition}

集合的推导式与列表很像,只不过用的是尖括号:

set_comp = {expr for value in collection if condition}

与列表推导式类似,集合与字典的推导也很方便,而且使代码的读写都很容易。来看前面的字符串列表。假如我们只想要字符串的长度,用集合推导式的方法非常方便:

In [156]: unique_lengths = {len(x) for x in strings}
In [157]: unique_lengths
Out[157]: {1, 2, 3, 4, 6}

map 函数可以进一步简化:

In [158]: set(map(len, strings))
Out[158]: {1, 2, 3, 4, 6}

函数

def my_function(x, y, z=1.5): # x,y:位置参数,z:关键字参数(关键字参数通常用于指定默认值或可选参数)
	if z > 1:
		return z * (x + y)
	else:
		return z / (x + y)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:17:25  更:2021-09-14 13:20:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:00:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码