python数据类型总结:
类型 | 描述 | 例子 | 备注 |
一个由字符组成的不可更改的有串行。 | 'Wikipedia' "Wikipedia" """Spanning multiple lines""" | 在Python 3.x里,字符串由Unicode字符组成 | |
bytes | 一个由字节组成的不可更改的有串行。 | b'Some ASCII' b"Some ASCII" |
|
list | 可以包含多种类型的可改变的有串行 | [4.0, 'string', True] |
|
tuple | 可以包含多种类型的不可改变的有串行 | (4.0, 'string', True) |
|
set, frozenset | 与数学中集合的概念类似。无序的、每个元素唯一。 | {4.0, 'string', True} frozenset([4.0, 'string', True]) |
|
dict | 一个可改变的由键值对组成的无串行。 | {'key1': 1.0, 3: False} |
|
int | 精度不限的整数 | 42 |
|
float | 浮点数。精度与系统相关。 | 3.1415927 |
|
complex | 复数 | 3+2.7j |
|
bool | 逻辑值。只有两个值:真、假 | True ,False |
|
Python函数使用
(1)df[column].values.tolist():数据框’column’(key)对应列的值转换为list。
(2)str(['(' + str(i) + ')' for i in l]).replace('[', '').replace(']','').replace("'", ''):循环for I in string 可以按顺序直接取出字符串中的单个字符,用.replace()替换原字符串中的符号。
(3)列表x=[1,2,3 ], x[0:1]=[1,2]
元组x=(1,2,3),不可改变的列表
字典dic={‘key1’: 1,’key2’: 3….},用key取值,dic[‘key1’]=1
都可以看作是一维的,存储的数据类型也没有要求,取值时用[ ]。数据框则复杂一些,列名有‘key’,行名有index,是二维的,常用pandas这个工具包。
注:Python中对数据的处理不同于我常用的MATLAB矩阵运算,总是将数据以矩阵的思维方式来处理,而是常用list和tuple,可以存储更加丰富的数据类型,不止是数值型,他们可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数。同时Python还提供了numpy包,专门用于矩阵数值计算处理。所以Python的数据存储容器更加丰富,灵活好用。
(4)类的定义
类的方法:在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,一定要用这个。
#类定义
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def__init__(self,n,a,w):
self.name =n
self.age =a
self.__weight = w
def speak(self):
print("%s is speaking: I am %d years old"%(self.name,self.age))
p = people('tom',10,30)
p.speak()
注:
I、类只是个抽象的定义,只有实例化后,才能使用其属性,方法。
II、创建一个类之后,可以通过类的名称访问其属性。如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象。
III、class MyMsg: 是旧的书写方式。
class MyMsg(object): 是新的书写方式,在Python3中只允许新的书写方式,所以建议使用新的书写方式。
(5)当前时间获取
相关包:datetime
Import datetime
Print(Time =datetime.datetime.now())
输出结果:2016-03-3017:16:35.288336
如果fromdatetime import datetime
Time =datetime.now()
获得需要的时间格式用Time= datetime.now().strftime(‘%Y-%m-%d %H:%M:%S’)
对应年,月,日,时,分,秒。
注:Python中默认的应用包是后面的,靠近代码的,如果包有重叠,后面引用的会覆盖前面的,所以有时要注意引用了哪些包,是否有重叠,是否顺序合理。
(6)str.format(),字符串的格式化函数,与%s的格式化功能相同,但更加强大,常会在打印输出时用到,它通过{}和:来代替%。
通过位置
In [1]: '{0},{1}'.format('kzc',18)
Out[1]: 'kzc,18'
In [2]: '{},{}'.format('kzc',18)
Out[2]: 'kzc,18'
In [3]: '{1},{0},{1}'.format('kzc',18)
Out[3]: '18,kzc,18'
字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。
通过关键字参数
In [5]: '{name},{age}'.format(age=18,name='kzc')
Out[5]: 'kzc,18'
通过对象属性
class Person:
def __init__(self,name,age):
self.name,self.age = name,age
def __str__(self):
return 'This guy is {self.name},is {self.age} old'.format(self=self)
In [2]: str(Person('kzc',18))
Out[2]: 'This guy is kzc,is 18 old'
通过下标
In [7]: p=['kzc',18]
In [8]: '{0[0]},{0[1]}'.format(p)
Out[8]: 'kzc,18'
格式限定符
它有着丰富的的“格式限定符”(语法是{}中带:号),比如:
填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
比如
In [15]: '{:>8}'.format('189')
Out[15]: ' 189'
In [16]: '{:0>8}'.format('189')
Out[16]: '00000189'
In [17]: '{:a>8}'.format('189')
Out[17]: 'aaaaa189'
精度与类型f
精度常跟类型f一起使用
In [44]: '{:.2f}'.format(321.33345)
Out[44]: '321.33'
其中.2表示长度为2的精度,f表示float类型。
其他类型
主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。
In [54]: '{:b}'.format(17)
Out[54]: '10001'
In [55]: '{:d}'.format(17)
Out[55]: '17'
In [56]: '{:o}'.format(17)
Out[56]: '21'
In [57]: '{:x}'.format(17)
Out[57]: '11'
用,号还能用来做金额的千位分隔符。
In [47]: '{:,}'.format(1234567890)
Out[47]: '1,234,567,890'
(7)pandas中常用方法,主要针对数据框,数据框类似于常用的表格设置,每列为一个变量,横条表示一个样本,不同日期或个体。
l 通常可以直接读取csv数据文件:df = pd.read_csv(‘文件路径.csv’)。
创建数据框:df = pd.DataFrame({….}),里面的形式是字典,每一列是序列的形式,也可以用pd创建,pd.Series([]),里面形式类似list。
l pandas用np.nan表示缺失值,不计算。df.dropnp()丢弃有NAN的行,df.fillna(vaule=8)将缺失值替换成vaule值。
l df.isnull()获取布尔值的 mask:哪些值是 NaN
l df.apply()对数据(行或列) Apply 函数
l pd.concat(df1,df2),简单地按行拼接
l pd.merge(left, right, on='key')与SQL的Join类似, right, on='key')
l df.append(),按行添加
l df.groupby(‘a’).sum()按a分组,并求和,分组是按行的标记,求和是每列分别每组求和
l df.dtype查看数据框中存放数据的类型,如int32, float, x.__class__是查看x这个整体的存储容器类型
(8)
enumerate用法:
在python中enumerate的用法多用于在for循环中得到计数,enumerate参数为可遍历的变量,如字符串,列表等,返回值为enumerate类。
注意:在同时需要index和value值的时候可以使用 enumerate。