弱数据类型、面向对象
int 理论上无范围限制
#二、八、十、十六进制:0b1001、0o11、9、0x9
a = 0b1001
bin(a) #二进制输出,不使用类型转换使默认十进制
oct(a) #八
hex(a) #十六
float 无double类型
#50.0 == 50. == 5e1
#输出该PC支持的浮点范围与精度
import sys
print(sys.float_info)
complex 复数类型
3+4j
c = 3+4j
print("实部={},虚部={}".format(c.real, c.imag))
bool int的子类 多数空序列结构会被判定为False
#True==1 False==0
print(True+True) #结果为2
str 使用Unicode编码 属不可变类型
s = "大数据基础"
len(s) #返回字符个数而非内码占内存字节数
g = s.encode('gbk') #使用其他编码格式
len(g) #结果为10,表明py中其它编码格式是字节串而非字符串
s = '汉'
ord(s) #返回Unicode序号
chr(27721) #返回Unicode序号对应字符
s = '''Dear passenger:
May I ...'''
#三引号为原排版输出,可包含换行
s[begin:end:step] #指出开始与结束端,以左闭右开(包含begin,不含end)为原则,按一定步长切片,步长为负表示从开始向左切
arr2d = np.arange(20).reshape((4, 5))
arr2d[:2:-2, 1::-2] #结果为16
相同值字符串指向同一内存空间,id()获取内存地址编号
s1 = "abc"
s2 = "abc"
print(id(s1) == id(s2))
常用方法
type(a) #返回特定对象数据类型
dir(str) #返回特定对象类型方法与属性
help(str.upper) #返回特定方法描述符
输入与输出
s = input("prompt") #从stdin以字符串格式输入
s = eval(input("prompt")) #取出串内表达式
name = "Donald"
print("{0:}'s income is {amount:$^10,.1f} per month.".format(name, amount=12345.67), end='')
#字符串format方法使用槽slot{:}进行格式化,’:‘前对应参数位置;后进行格式控制,依次为填充符、对齐方式、宽度、三分位逗号、小数精度、类型
#print函数默认回车结尾,使用第二个参数更改结束分隔符
tuple list str
#列表推导式生成
s = "123abc456def"
s1 = [c for c in s if c.isdigit()]
#增删
s1.append('7')
s1.remove('1') #仅删除第一个元素
#判断成员关系in ,not in
'7' in s1
#排序,改变原列表,key为比较器函数
s1.sort(key, reverse)
#判等基于值比较,is基于内存位置
s1 = s2 = "abc"
list(s1) == list(s2) #True
list(s1) is list(s2) #False
tuple使用
#多返回值
def foo(x):
return x, x**3
#多变量同步赋值
a, b = 'cat', 'dog'
a, b = (b,a)
#循环遍历
for x, y in ((1, 0), (2, 5)):
set 集合要求元素可hash,即不可变元素
hash("hello")
dict 字典要求键可hash,即不可变元素
#推导式生成
{name:score for name, score in stuInfo.items() if score > 90}
#for in遍历
for k, v in D.items():
print(k+":"+v)
构造函数为numpy.array()
numpy中的数组为连续存储,随机访存效率高于py内置的list(链表)
import numpy as np
arr = np.arange(10) #生成从0开始n个整数的数组
自定义数组元素数据类型dtype
#numpy.dtype(object, align, copy)
student = np.dtype([('name', 'S20'), ('age', 'u1'), ('marks', ')])
#结构化object使用元组数组,类似sql以属性名,属性类型定义
#格式:大小端存储'<','>' 类型 占用内存字节大小
#常见类型:f2/4/8/16 i1/2/4/8 u1/2/4/8 S/U20 o
data = [('Diego', 12, 90), ('Eugene', 40, 75)]
arr = np.array(data, dtype = student)
#常用生成函数
np.zeros()
np.ones()
np.arange()
np.empty()
ndim数组维度
shape每维度的数量
Itemsize表示单元素占内存字节
size表示数组元素个数
reshape() resize()
#reshape()生成拷贝 resize()重塑原数组
arr2d = np.arange(15).reshape(3, 5)
flatten()降为一维
tolist()转为py内置list
使用np.ndarray构建的具有相互关联的主数组与索引数组的长度固定且有序的字典
#一般创建方法
pd.Series(4, index=list("abc"))
#使用字典创建时没有数据补NaN,没有索引则删除
pd.Series({'e':5, 'b':3, 'f':4}, index = ['a', 'b', 'e'])
用于表示矩阵数据
可理解为共享相同行索引的Series字典
#构建 字典的key作为列索引
import pandas as pd
data = {'name':['Diego', 'Anna', 'Eugene'],
'gender':['M', 'F', 'M'],
'age':[12, 23, 34]}
df = pd.DataFrame(data)
#嵌套字典构建时外层键作列索引,内层键作行索引
data = {'name':[1:'Diego', 2:'Anna', 3:'Eugene'],
'gender':[1:'M', 2:'F'],
'age':[1:12, 2:23, 3:34]}
df = pd.DataFrame(data)
#使用ndarray构建
df = pd.DataFrame(np.arange(9).reshape(3, 3), index = ['a', 'b', 'c'], columns = ['one', 'two', 'three'])
#筛选前5行
df.head()
#筛选列 结果为Series对象
df['name']
#筛选行 结果为Series对象
df.loc[3]
#重新构建索引 缺失值默认用NaN填充,可用fill_value指定填充值
df.reindex(index=['a','b','c'], columns=['one','two','three'])
#索引类型对象 只读型容器
labels = df.index
labels = df.columns