python数据分析(一) python当中的数据类型--数字和常用函数
python当中内置了多种数据类型,了解python内置的基本数据类型,有助于进行进行数据处理。第一篇我们将介绍python当中的数字。
我们将介绍每一种数字类型,他们适用的操作符,以及用于处理的内建函数。
python支持多种数字类型分别是:整形,布尔型,双精度浮点型和复数。
1.数字变量的赋值,更新和删除
赋值:
In [4]: a=123
In [5]: a
Out[5]: 123
更新:
实际上数字时不可变对象,也就是说对于一个变量的更新,是在内存当中从新创建了一个新的数字,然后将原有的变量指向这个新的数字。
In [6]: a=456
In [7]: a
Out[7]: 456
删除:
使用del方法进行删除
In [8]: del a
In [9]: a
—————————————————————————
NameError Traceback (most recent call last)
<ipython-input-9-3f786850e387> in <module>
—-> 1 a
NameError: name \’a\’ is not defined
2.整型
python当中的整型有2种形式,布尔型,整型(长整型在python3当中已经被移除了)
布尔型:布尔型实际上只有两个值,True和False
整型:标准整型是最通用的数据类型,在实际使用当中足够大数值保存为整型时也不会溢出,python天生支持大数运算(当然要是超过内存大小它还是会溢出吧)
3.浮点型
python当中的浮点数类似于C语言当中的double 类型是双精度浮点,可以用直接的十进制和科学计数法表示。
python当中的浮点与所有其他支持浮点运算的语言相同,都会出现不精确的问题,就如同使用十进制很难去精确的表达一个分数例如1/3,对于十进制的浮点数,使用二进制也很难精确的表达这个小数。
In [19]: a=4.2
In [20]: b=2.1
In [21]: a+b
Out[21]: 6.300000000000001
虽然python当中的浮点数没有那么精确,但是处理日常大多数任务已经足够,且使用python内置的浮点数进行运算时,速度也会快很多,但是当你面对需要高精度的场景时可以使用decimal模块,当然速度会慢一些。
4.复数
python当中支持复数,python当中的复数有以下特点:
1.复数由实部和虚部共同组成
2.虚部不能单独存在
3.实数和虚数部分都是浮点型
4.虚数部分必须有后缀J或者j
复数有以下属性:
num.real 返回复数的实部
num.imag返回复数 虚部
num.conjugate()返回复数的共轭复数
In [25]: a=7+8j
In [26]: a.real
Out[26]: 7.0
In [27]: a.imag
Out[27]: 8.0
In [28]: a.conjugate()
Out[28]: (7-8j)
运算符:
算术运算符
以下假设变量a为10,变量b为21:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 – 两个对象相加 | a + b 输出结果 31 |
– | 减 – 得到负数或是一个数减去另一个数 | a – b 输出结果 -11 |
* | 乘 – 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
/ | 除 – x 除以 y | b / a 输出结果 2.1 |
% | 取模 – 返回除法的余数 | b % a 输出结果 1 |
** | 幂 – 返回x的y次幂 | a**b 为10的21次方 |
// | 取整除 – 向下取接近除数的整数 |
比较运算符
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 – 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 – 比较两个对象是否不相等 | (a != b) 返回 True。 |
> | 大于 – 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 – 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | (a < b) 返回 True。 |
>= | 大于等于 – 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 – 返回x是否小于等于y。 | (a <= b) 返回 True。 |
赋值运算符
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c – a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
位运算符(仅适用于整型)
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13二进制格式如下:
a = 0011 1100
b = 0000 1101
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由”<<“右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
内建函数与工厂函数
1.工厂函数
什么是工厂函数,也就是说他们看上去虽然像函数但是实际上是类,当调用时实际上是生成了该类的一个实例,所以把他们叫做工厂函数。
bool(obj)返回对象的布尔值,转换 bool 值时除了 \’\’、””、\’\’\’\’\’\’、””””””、0、()、[]、{}、None、0.0、0L、0.0+0.0j、False 为 False 外,其他都为 True
In [36]: bool(32)
Out[36]: True
In [37]: bool(\’dasd\’)
Out[37]: True
In [38]: bool(0)
Out[38]: False
In [39]: bool(-1)
int(obj)返回对象的整数表示,int可将数字,字符串转成十进制的整型表示, 同时提供一个选项base,将传入的字符串规定为相应的进制,然后转化为10进制
In [47]: int(123)
Out[47]: 123
In [48]: int(\’1fd\’,16)
Out[48]: 509
float()返回对象的浮点表示
In [50]: float(4)
Out[50]: 4.0
In [51]: float(\’4\’)
Out[51]: 4.0
In [52]:
2.内建函数
对于数值而言,python有4个内置函数用于数值运算:abs(),divmod(),pow(),round()
abs()
返回数值的绝对值需要特殊说明的是对于复数而言,其本质含义是该虚数所代表的向量的长度。比如|a+bi|指的是复数a+bi的模,即复平面上该复数向量a+bi的长度=根号(a的平方+b的平方)。
divmod()
它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于混合操作数类型,适用双目算术运算符的规则。对于整数,结果和 (a // b, a % b) 一致。对于浮点数,结果是 (q, a % b) ,q 通常是 math.floor(a / b) 但可能会比 1 小。在任何情况下, q * b + a % b 和 a 基本相等;
pow()
pow和**一样都可以完成对一个数字的次方,不同的是对于pow而言可以多接受一个参数(数字)完成对此数字取余,pow(x,y,z) 效率比pow(x,y)%z高。
round(num[,ndigits])
返回 number 舍入到小数点后 ndigits 位精度的值。 如果 ndigits 被省略或为 None
,则返回最接近输入值的整数。
对于支持 round()
的内置类型,值会被舍入到最接近的 10 的负 ndigits 次幂的倍数;如果与两个倍数的距离相等,则选择偶数 (因此,round(0.5)
和 round(-0.5)
均为 0
而 round(1.5)
为 2
)
注解
对浮点数执行 round()
的行为可能会令人惊讶:例如,round(2.675, 2)
将给出 2.67
而不是期望的 2.68
。 这不算是程序错误:,正如我们前面提到的一样,这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示,所以会导致这样的问题。
In [53]: round(-0.5)
Out[53]: 0
In [54]: round(0.5)
Out[54]: 0
In [55]: round(2.675,2)
Out[55]: 2.67
仅用于整型的函数:
1.进制转换函数
python内置函数提供了两个内建函数来返回字符串的八进制和十六进制进制,他们分别是oct()和hex().他们都接受一个整型对象,返回一个对应值的字符串对象。
In [56]: hex(213213)
Out[56]: \’0x340dd\’
In [57]: oct(123123)
Out[57]: \’0o360363\’
2.ASCII 转换函数
python也提供了ASCII码与数值之间的转换函数,每个字符对应一个惟一的整型(0-255)
chr() 接受一个整型值,返回ASCll中对应的字符
ord()接受一个字符(string类型),返回其对应的整型值
相关模块:
除了python内置的模块外,还有以下高级模块用于数值的处理。
numbers
模块定义了数字类型的抽象层次结构。 math
和 cmath
模块包含浮点数和复数的各种数学函数。 decimal
模块支持使用任意精度算术的十进制数的精确表示。