• 关于这学期的总结


    # 例1-2  正确缩进
    # 比较两个数字对于π的精度,保持缩进一致
    pie = 3.1415
    pie1 = 3.14
    # 同一代码块内各行缩进空格数目相同,观察输出结果
    if pie > pie1:
        print('π取pie更精确')
    elif pie == pie1:
        print('π取pie或pie1一样精确')
    else:
        print('π取pie1更精确')
    
    # 例1-4  长语句换行
    # 给出3种水果的价格,计算总价
    apple_price, banana_price, pear_price = 1, 1.5, 0.5
    # 通过反斜杠实现长语句换行
    total_price = apple_price + 
    banana_price + 
    pear_price
    print('total_price =', total_price)
    
    # 例1-5  逗号换行
    # 方括号内,在逗号后直接换行
    total_price = sum([apple_price, 
                banana_price, 
                pear_price])
    print('total_price =', total_price)
    
    # 例1-6  分号隔离
    # 给出3种水果的价格,计算总价
    apple_price = 1; banana_price = 1.5; pear_price = 0.5
    total_price = apple_price + banana_price + pear_price
    print('total_price =', total_price)
    
    import   keyword
    print('Python中的所有保留字为:
    ',keyword.kwlist)
    
    # 例1-8   赋值的基本形式
    # 使用等号直接给num_int赋值一个整数值
    num_int = 1
    print('使用等号创建的整数为:', num_int)
    
    # 使用等号直接给num_float赋值一个浮点数值
    num_float = 9.9
    print('使用等号创建的浮点数为:', num_float)
    
    # 使用等号直接给string赋值一个字符串
    string = 'python'
    print('使用等号创建的字符串为:', string)
    
    # 例1-9  序列赋值
    # 序列赋值可给变量赋值多种数据类型
    num_int, string, list1 = 123, 'str', [4,6]
    print('赋值创建的多种数据类型为:', num_int, string, list1)
    # 序列赋值可给变量赋值已赋值的变量
    num1, num2, num3 = 7, 8, 9
    num_int1, num_int2, num_int3 = num1, num2, num3
    print('变量赋值为已赋值变量结果为:', num_int1, num_int2, num_int3)
    
    # 例1-10  链接赋值
    str1 = str2 = str3 = 'STR'
    print('str1, str2, str3分别为:', str1, str2, str3)
    
    print('str1, str2, str3的内存地址分别为:', id(str1), id(str2), id(str3))
    
    print('str1, str2, str3是否等价:', str1 is str2 is str)
    
    # 代码1-11  增量赋值
    x = 100
    x += 10
    print('x += 10等价于x=x+10,其值为:', x)
    
    # 例1-12  算术运算
    num_int = 4
    num_float = 4.0
    print('整数与浮点数的和为:', num_int + num_float)
    print('整数与浮点数的差为:', num_int - num_float)
    print('整数与浮点数的积为:', num_int * num_float)
    print('浮点数与整数的商为:', num_float / num_int)
    print('浮点数对整数取模结果为:', num_float % num_int)
    print('浮点数的整数次幂为:', num_float ** num_int)
    
    # 例1-13  赋值运算
    num_int1 = 4
    print('赋值后num_int1为:', num_int1)
    num_int1 = 4 + 6
    print('赋值后num_int1为:', num_int1)
    num_int1 = 4 * 2
    print('赋值后num_int1为:', num_int1)
    num_int1 = 4 / 2
    print('赋值后num_int1为:', num_int1)
    num_int1 = 4 % 2
    print('赋值后num_int1为:', num_int1)
    num_int1 = 4 ** 2
    print('赋值后num_int1为:', num_int1)
    
    # 例1-14  比较运算
    num_int = 4
    num_float = 4.0
    print('num_int与num_float是否相等:', num_int == num_float)
    print('num_int与num_float是否不相等:', num_int != num_float)
    print('num_int是否大于num_float:', num_int > num_float)
    print('num_int是否小于num_float:', num_int < num_float)
    print('num_int是否大于等于numfloat:', num_int >= num_float)
    print('num_int是否小于等于num_float:', num_int <= num_float)
    
    
    # 例1-15  逻辑运算
    num_bool1 = False
    num_bool2 = True
    print('num_bool1 and num_bool2返回值为:', num_bool1 and num_bool2)
    
    print('num_bool1 or num_bool2返回值为:', num_bool1 or num_bool2)
    
    print('not num_bool2的返回值为:', not (num_bool2))
    
    # 例1-16 身份运算
    num_int1 = 15
    num_int3 = 15
    print('num_int1与num_int3储存单位是否相同:', num_int1 is num_int3)
    
    num_int2 = 15.0
    print('num_int1与num_int2储存单位是否相同:', num_int1 is num_int2)
    
    # 如果储存单位相同就返回True,否则返回False
    print('num_int1与num_int3储存单位是否不同:', num_int1 is not num_int3)
    
    print('num_int1与num_int2储存单位是否不同:', num_int1 is not num_int2)
    
    # 例1-17 成员运算
    num_int1 = 15
    list2 = [1, 'apple', 15]
    print('num_int1是否在list2中:', num_int1 in list2)
    
    array = ('orange', 6, 15)
    print('num_int1是否不在array中:', num_int1 not in array)
    
    
    # 例1-18 运算符优先级
    # 先执行乘除法运算,再执行加减法运算
    print('num_float + num_int1 / num_int3 =', num_float + num_int1 / num_int3)
    # 先执行加减法运算,再执行比较运算
    print('num_int1 - num_int2 > num_int1 - num_int3:',
          num_int1 - num_int2 > num_int1 - num_int3)
    # 先执行加减法运算,再做身份判断
    print('num_int1 - num_int3 + num_int1 is num_int1:',
          num_int1 - num_int3 + num_int1 is num_int1)
    # 先执行指数运算,再执行减法运算,最后做身份判断
    print('num_float ** 2 - 1 is not num_int2:',
          num_float ** 2 - 1 is not num_int2)
    
    #例1-19 创建 number
    num_int = 2
    num_float = 4.5
    num_bool = True
    num_complex = 3j
    print('数据类型分别为:
    ', type(num_int),
          type(num_float), type(num_bool), type(num_complex))
    
    # 例1-20 number 类型装换与混合运算
    # number类型转换, 将float转换为int(直接去掉小数部分)
    print('int(4.5)的结果为:', int(4.5))
    # 将int转换为float(直接增加小数部分)
    print('float(4)的结果为:', float(4))
    # 将int和float转换为complex(直接增加虚部)
    print('complex(4)和complex(4.5)的结果分别为:', complex(4), complex(4.5))
    # 不同number类型混合运算, int + float = float
    print('整数和浮点数和的类型为:', type(124 + 4.0))
    # int + complex = complex
    print('整数和复数和的类型为:', type(124 + 5.3j))
    # float + complex = complex
    print('浮点数和复数和的类型为:', type(4.0 + 5.3j))
    
    # 例1-21 str 索引
    string = "ilovePython"
    # 下标为正数,从第2个字符开始索引,到第5个字符
    print('ilovePython[1:5] =', string[1:5])
    # 下标为负数,从倒数第10个字符开始索引,到倒数第6个字符
    print('ilovePython[-10:-6] =', string[-10:-6])
    print('ilovePython[:5] =', string[:5])
     # 尾下标留空,从第2个字符开始索引,到最后一个字符截止
    print('ilovePython[1:] =', string[1:])
    # 按步索引,从第2个元素开始索引,到第11个元素,步距为3
    print('ilovePython[1:10:3] =', string[1:10:3])
    
    # 例1-22 str 查询方法
    print('string中n的位置和总数分别为:', string.index('n'), string.count('n'))
    print('string中是否只包含字母:', string.isalpha())
    print('string中是否只包含数字:', string.isdigit())
    print('string是否已P开头:', string.startswith('P'))
    print('string是否是标题化的:', string.istitle())
    
    # 例1-23 str 改写方法
    print('string左对齐填充至20个字符结果为:', string.ljust(20))
    print('string右对齐填充至20个字符结果为:', string.rjust(20))
    print('string大写化结果为:', string.upper())
    print('string大小写置换结果为:', string.swapcase())
    print('string中h替换为H结果为:', string.replace('h','H'))
    
    # 例1-24 str 方法-其他
    # 以指定格式编码
    string = string.encode('UTF-16', 'strict')
    print ("string编码为:", string)
    # 以指定格式解码
    string = string.decode('UTF-16', 'strict')
    print ("string解码为:", string)
    # 以指定分隔符分割str
    print(string.partition("."))
    string1 = ('I','love','Python')
    sep = '-'
    # 以sep为分隔将string1合并为新的字符串
    print('以sep分隔合并string1为:', sep.join(string1))
    
    # 例1-25 str 转义与常用操作
    print ('
    otemybook')  # str中包含
    ,识别为换行符并转义
    
    print ('	itlemybook')  # str中包含	,识别为制表符并转义
    
    print (r'
    otemybook ')  # 使用r制止转义
    
    print (string + "TEST")  # 输出连接的str
    
    print (string * 2)  # 输出str两次
    
    # 例1-26 创建 list
    # 使用方括号创建一个非空list
    list1 = ['runoob', 786, 2.23, 'john']
    print('方括号建立的列表为:', list1)
    #建立元组
    tuple1 = (123, 'xyz', 'zara', 'abc')
    list2 = list(tuple1)
    print('元组转换成列表结果为:', list2)
    
    # list函数将str拆开,作为新list中的元素
    list3 = list('china')
    print('字符串转换成列表结果为:', list3)
    
    # 例1-27 list 基本操作
    print('列表按指定长度索引结果为:', list3[-4:-2])
    
    print('列表按步长索引结果为:', list3[0::2])
    
    list1[2] = 666
    print('列表替换结果为:', list1)
    
    print('list1和list2用+连接结果为:', list1 + list2)
    
    print('列表通过*重复结果为:', list1 * 2)
    
    # 例1-28 list 常用方法
    print('list3中a出现的次数:', list3.count('a'), '
    ',   'list3中a首次出现的位置:', list3.index('a'))
    list3.insert(0,'g')
    list1.append('新增')
    list2.extend(list3)
    print('在列表指定位置插入元素:', list3, '
    ',      '在列表末尾新增元素:', list1, '
    ',      '将list3扩展至list2:', list2)
    list3.insert(0,'g')
    list1.append('新增')
    list2.extend(list3)
    print('在列表指定位置插入元素:', list3, '
    ',      '在列表末尾新增元素:', list1, '
    ',      '将list3扩展至list2:', list2)
    
    list3.pop(0)
    list1.remove('新增')
    print('使用pop删除指定位置的元素:', list3, '
    ',      '使用remove删除指定元素:', list1)
    list2.pop(0)
    list2.sort()
    list3.reverse()
    print('列表排序:', list2, '
    ',      '列表反向排序:', list3)
    
    # 例1-29 创建tuple
    # 使用圆括号创建tuple
    tup1 = ('Google', 'Runoob')
    print('查看tup1类型:', type(tup1), '
    ',      '查看tup1:', tup1)
    # 不加括号创建tuple
    tup2 = "a", "b", "c", "d"
    print('查看tup2:', tup2, '
    ',      '查看tup2类型:', type(tup2))
    
    # 将[‘x',’y',’z']转换成tuple
    tup3 = tuple(['x','y','z'])
    print('查看tup3:', tup3, '
    ',      '查看tup3类型:', type(tup3))
    # 单个数字元素加逗号,变量是tuple
    tup4 = (50,) 
    # 单个数字元素无逗号,变量是int
    tup5 = (50)
    print('tup4和tup5的类型分别为:', type(tup4), type(tup5))
    
    # 例1-30 tuple 基本操作
    print('tup2中第3元素为:', tup2[2])
    print('tup2中第1个到倒数第二个元素为:', tup2[:-1])
    
    print('连接两个元组结果为:', tup1 + tup2)
    
    print('元组重复输出结果为:', tup3 * 2)
    
    # 例1-31 tuple 内置方法
    print('tup2中元素a出现的次数:', tup2.count('a'))
    
    print('tup2中元素a首次出现的位置:', tup2.index('a'))
    
    # 例1-32 创建 dict
    # 使用花括号创建空dict,更新键值对
    dict1 = {}
    dict1['one'] = "This is 1"
    dict1['two'] = "This is 2"
    print('查看字典:', dict1)
    # 使用dict函数创建dict,指定键值对
    dict2 = dict(name='小明', height=187)
    print('查看字典:', dict2)
    
    # 例1-33
    print('通过键索引字典元素:', dict1['one'])
    
    dict1['one'] = 'this is 1'
    print('以键改字典元素值:', dict1)
    
    dict1[3] = 'This is 3'
    print('更新后的字典为:', dict1)
    
    del dict1[3]
    print('删除键3后的字典为:', dict1)
    
    # 例1-34 dict 内置方法
    print('输出dict1中所有键值对:', dict1.items(), '
    ',
          '输出dict1中所有的键:', dict1.keys(), '
    ',
          '输出dict1中所有的值:', dict1.values())
    
    print('与one对应的元素为:', dict1.get('one'), dict1.setdefault('one'))
    
    dict1.update(dict2)
    dict3 = dict2.copy()
    print('将dict2中键值对更新到dict1中:', dict1, '
    ',
          '将dict2中内容复制到新的字典中:', dict3)
    
    dict1.pop('name')
    dict2.popitem()
    dict3.clear()
    print('删除dict1中name键对应的内容:', dict1, '
    ',
          '随机删除dict2中的一个键值对为:', dict2.popitem(), '
    ',
          '清空dict3中的内容:', dict3)
    
    # 例1-35 创建 set
    # 使用非空的{}创建set
    set1 = {1, 2, 3}
    print('set1的类型为:', type(set1))
    # 创建一个空的set只能使用set函数
    set2 = set()
    print('查看set2:', set2, '
    ',   'set2的类型为:', type(set2))
    # 将list、tuple转换为set
    set3 = set([1,2,3])
    set4 = set((1,2,3))
    print('查看set3和set4:', set3, set4, '
    ',
          'set3和set4的类型分别为:', type(set3), type(set4))
    
    # 例1-36 set 常用方法
    set1.add('a')
    print('add方法向set1中添加元素结果为:', set1)
    
    set1.pop()
    print('pop方法删除set1中任意一个元素结果为:', set1)
    
    set2.clear()
    print('清除set2中内容结果为:', set2)
    
    # 例1-37 set 集合运算
    print('set4是否为set1的子集:', set4 < set1)
    
    print('set4和set1的并集为:', set4 | set1)
    
    print('set4和set1的交集为:', set4 & set1)
    
    print('set4和set1的差集为:', set4 - set1)
    
    # # 例1-38 输入不同数据类型
    # # 输入一个数字,由Python默认类型
    # number1 = input('请输入一个数字:')
    
    # # 输入一个str,由Python默认类型
    # str1 = input('请输入一个字符串:')
    
    # # 输入一个数字,并将其转换为int类型
    # number2 = int(input('请输入一个数字:'))
    
    # # 查看以上输入的输出结果类型
    # print('number1、str1和number2的类型分别为:
    ',
    #       type(number1), type(str1), type(number2))
    
    
    # 例1-39 print 函数应用
    # print函数接受多个str
    print('', '', '中华')
    
    # print函数在打印前计算结果
    print('100+200 =', 100 + 200)
    
    # 例1-40 “ % + 格式符” 格式化输出
    # 用%s、%d分别格式化字符串'Zara'和整数20
    print("我的名字叫做%s,已经%d岁了!"%('Zara',20))
    
    # 用%d格式化16,用%o将十进制整数16用八进制数表示
    print("%d 的八进制是 %o"%(16,16))
    
    # 用%.3f将整数转化为保留小数点后3位的float
    print("23 转化为保留3位小数的浮点数%.3f"%(23))
    
    # format函数不带参数情况下的输出
    print("我的名字叫做{},已经{}岁了!".format('Zara', 18))
    
    # format函数带数字编号并打乱顺序
    print("我的名字叫做{1},已经{0}岁了!".format(18, 'Zara'))
    
    # format函数带关键字参数
    print("我的名字叫做{name},已经{age}岁了!".format(age=18,name='Zara'))
    
    # format函数格式化数字为二进制数
    print("我的名字叫做{},已经{:b}岁了!".format('Zara', 18))
    
    # # 例1-41 read 函数读取 test.txt 文件
    # # 以只读模式打开test.txt文件
    # data = open('../data/test.txt', 'r')
    # # 读取文件中的内容,存到content变量中
    # content = data.read()
    # # 打印出content变量中包含的文本内容
    # print('该文本中的内容是:', content)
    
    # #例1-42 write 函数写入文件
    # # 打开一个文件
    # web = open('../data/web.txt', 'w')
    # # 转换内容,写入文件
    # value = ('http://www.tipdm.org', 14)
    # str_value = str(value)
    # web.write(str_value)
    # web.close()
    # # 打开文本,读取出写入的内容
    # web = open(‘../data/web.txt', 'r')
    # content = web.read()
    # print('该文本中的内容是:', content)
    
    # # 例1-43 if-else语句实现登录界面
    # name = input ('请输入用户名:')
    # password = input ('请输入密码:')
    # if name == "Lucy" and password == "123456":
    #     print ('****登录成功,欢迎!*****')
    # else:
    #     print ('-----您的输入有误,登录失败!-----')
    
    # # 例1-44 使用if-elif-else语句实现年龄段的判断
    # age = input('请输入您的年龄:')
    # age = int(age)
    # if age < 18:
    #     print('未成年人!')
    # elif age >= 18 and age <= 25:
    #     print('青年人!')
    # elif age > 25 and age <= 60:
    #     print('中年人!')
    # else:
    #     print('老年人!')
    
    
    # #例1-45 嵌套if-elif-else语句
    # age = input('请输入你的年龄:')
    # age = int(age)
    # if age == 35:
    #     nation = input('请输入你的国籍:')
    #     if nation == '英国':
    #         print('你是Tom! ')
    #     elif (nation == '法国'):
    #         print('你是Frank! ')
    #     else:
    #         print('你是Bob! ')
    # elif age == 21:
    #    print('你是Jane,来自南非! ')
    # elif age == 51:
    #    print('你是Washington,来自澳大利亚! ')
    # else:
    #    print('请输入正确年龄值! ')
    
    # 例1-46  if-else语句的单行形式
    num1, num2 = 11, 90
    print('num1加num2为百分数') if 1000 > num1 + num2 >100 else print('num1加num2不为百分数')
    
    # 例1-47 for语句遍历提取str
    # 单纯遍历的for语句
    names = ['Michael', 'Bob', 'Tracy']
    # 遍历输出names中的元素
    for name in names:
        print(name)
    
    #例1-48 for语句遍历查询dict
    dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
    # 遍历键值对
    print('
    key_value:', end = '')
    for key, value in dic.items():
        print(key, value, sep = ':', end = ' ')
    # 遍历键
    print('
    keys:', end = '')
    for key in dic.keys():
        print(key, end = ' ')
    # 遍历值
    print('
    values:', end = '')
    for value in dic.values():
        print(value, end = ' ')
    
    # # 例1-49 嵌套for语句
    # students = ['小明', '小红']
    # subjects = ['语文', '数学'] 
    # sum1 = []
    # avg = []
    # for i in students: 
    #     print ('开始录入%s的考试成绩!'%i) 
    #     sum = 0
    #     for j in subjects: 
    #         print('请输入%s成绩:'%j) 
    #         score = int(input())
    #         sum += score
    #     average = sum / 2
    #     avg.append(average)
    #     sum1.append(sum)
    # print(students, '的总分依次是', sum1, ',', '平均分依次是', avg)
    # print('完成成绩录入!')
    
    # 例1-50 while语句
    sum = 0
    n = 99
    while n > 0:
        sum += n
        n -= 2
    print(sum)
    
    # # 例1-51 嵌套while语句
    # j = 1
    # while j <= 2:
    #     sum = 0
    #     i = 1
    #     name = input('请输入学生姓名:')
    #     while i <= 2:
    #         print ('请输入第%d门的考试成绩: '%i)
    #         sum += int(input())
    #         i += 1
    #     avg = sum / (i-1)
    #     print(name, '的平均成绩是%d'%avg)
    #     j += 1
    # print('学生成绩输入完成!')
    
    
    # 例1-52 break语句的使用
    # break语句用于for循环
    string = "Python"
    for i in string:
    # 遍历至string中的字符n时,不再执行else代码块
        if i == 'n':
            break
        else:
            print("letter:{}". format(i))
    
    # break语句用于while循环
    counts = 0
    while True:
        print(counts)
        counts += 1
    # 满足counts等于3时跳出循环,不再进入循环体
        if counts == 3: 
            break
    
    # 例1-53
    # 第一层循环,遍历次数为2
    for i in range(2):
        print("-----%d-----" %i)
    # 第二层循环,遍历次数为5
        for j in range(5):
    # 当j等于2或4时,不执行循环体
            if j == 2 or j == 4:
                continue
            print(j)
    
    # 例1-54
    for element in "Python":
    # element为y时,不做任何操作,不会被输出
        if element == "y":
            pass
        else:
            print(element)        
    
    counts = 0
    while counts < 5:
        counts += 1
    # i=3时,不执行循环体
        if counts == 3:
            pass
        else:
            print(counts ** 2)
    
    # 例1-55 
    vec = [-4, -2, 0, 2, 4]
    # 用vec中元素的倍数,创建一个数组
    print([x * 2 for x in vec])
    
    # 创建一个包含2元tuple的list
    print([(x, x ** 2) for x in range(6)])
    
    
    # 例1-56
    list1 = [1, 2, 3, 4]
    # bytes函数、bytearray函数
    print('list1的不可变字节数组为:', bytes(list1), '
    ',
          'list1的可变字节数组为:', bytearray(list1))
    
    # chr函数、ord函数
    print('整数40的unicode字符为:', chr(40), '
    ',
          'unicode字符(对应的整数为:', ord('('))
    
    # bin函数
    print('整数40的二进制形式为:', bin(40))
    
    # ascii函数
    print('字符串tipdm的ascii码为:', ascii('tipdm'))
    
    # hash函数
    print('字符串tipdm的hash值为:', hash('tipdm'))
    
    # 例 1-57
    # max函数、min函数
    print('序列中的最大数为:', max(list1), '
    ',
          '序列中的最小数为:', min(list1))
    # abs函数
    print('-10和100的绝对值分别为:', abs(-10), abs(100))
    
    # pow函数
    print('3的6次方为:', pow(3, 6))
    
    # round函数
    print('3.2四舍五入结果为:', round(3.2))
    
    # divmod函数
    print('7除以3的商和余数分别为:', divmod(7, 3))
    #例 1-58
    # map函数
    # 对一个list中的各个float分别四舍五入
    print('浮点数的四舍五入结果为:', list(map(round, [1.1, 2.2, 3.3, 4.4, 5.5])))
    # zip函数
    list3 = [1, 2, 3]
    list4 = [4, 5, 6]
    zipped = zip(list3, list4)
    # zip函数直接返回的是数据对象
    print('返回对象为:', zipped, '
    ',  '返回为list:', list(zipped))
    
    # 例1-59
    def exponent(a, b):
        x = a ** b
        return x
    print('自定义幂运算的返回值为:', exponent(3, 6))
    
    # 例 1-60
    # 无参数,无返回值
    def  hello():
        print('Hello!')
    hello()
    print('***以上为hello()的输出,以下为print(hello())的输出***')
    print(hello())
    
    # 无参数,有返回值
    def func():
        return("Python")
    func()
    
    # 多参数,无返回值
    def func1(a, b):
        print("a + b = %d"%(a + b))
    func1(3, 4)
    
    # 多参数,有返回值
    def func2(a, b):
        return (a + b)
    print('a、b加和为:', func2(4, 3))
    
    
    # 多个返回值
    def maxtomin(a, b):
    #返回a,b从大到小的排列
        if a > b:
            return  a, b
        else:
            return  b, a
    print('a、b排序为:', maxtomin(2, 4))
    
    # 例 1-61
    # 使用位置参数
    def  func3(b, a, c):
        return (a ** 2, b ** 2, c ** 2)
    result = func3(1, 2, 3)
    print('1、2、3经函数func3运算的结果为:', result)
    
    # 使用关键字参数
    def  func4(a, b, c):
        return (a ** 2, b ** 2, c ** 2)
    result1 = func4(b=2, a=1, c=3)
    print('1、2、3经函数func4运算的结果为:', result1)
    
    # 混合使用位置参数和关键字参数,位置参数必须在关键字参数的前面
    def  func5(a, b, c):
        return (a ** 2, b ** 2, c ** 2)
    result2 = func5(1, c=3, b=2)
    print('1、2、3经函数func5运算的结果为:', result2)
    
    # 例1-62
    def  func6(a, b = 2):
        print(a, b)
    func6(1)
    def  func7(string, *numbers):
        print(string, numbers)
    func7('numbers:', 1, 2, 3)
    def  func8(a, *numbers, **kwargs):
        print (a, numbers, kwargs)
    func8(4, 2, 3, 4, b = 2, c = 3)
    
    # 例1-63
    x = 99
    def func9(y):
        return x + y
    print('y = 1, x + y为:', func9(1))
    
    def func10(y):
        x = 12 
        return x + y
    print('x为:', x, '
    ',
          'y=1, x+y为:', func10(1))
    
    # 例1-64
    x, y, z = 0, 2, 3
    def func11():
        x = 1
    print('x + y与z是否相等:', x + y == z)
    
    # 调用函数
    func11()
    print('x + y与z是否相等:', x + y == z)
    
    def func12():
        global x
        x = 1
    
    print('x + y与z是否相等:', x + y == z)
    
    # 调用函数
    func12()
    print('x + y与z是否相等:', x + y == z)
    
    # 例1-65
    x = 1
    list1 = [1, 2]
    def func13(x,y):
        x = 2
        y[0] = 'str'
    func13(x, list1)
    print('调用函数后传入的参数变化为:', x, list1)
    
    # 例1-66
    sum1 = lambda arg1, arg2: arg1 + arg2
    print("相加值为:", sum1(10, 20))
    # 使用lambda语句
    print(list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
    f1 = lambda x: '传入的参数为1' if x == 1 else '传入的参数不为1'
    f1(10)
    
    # #1. 输入一个包含若干自然数的列表,输出这些数的平均值,结果保留3位小数。
    # data=eval(input('请输入一个包含若干自然数的列表:'))
    # avg=sum(data)/len(data)
    # avg=round(avg,3)
    # print('平均值为:',avg)
    
    # #2. 输入一个包含若干自然数的列表,输出一个新列表,新列表中每个元素为原列表中每个自然数的位数。
    # data=eval(input('请输入一个包含若干自然数的列表:'))
    # data=map(str,data)
    # length=list(map(len,data))
    # print('每个元素的位数:',length)
    
    # #3. 输入一个字符串,输出其中每个唯一字符最后一次出现的下标。
    # text=input('请输入一个字符串:')
    # positions=[(ch,index) for index,ch in enumerate(text) if (index==text.rindex(ch)) and (text.count(ch)==1)]
    # print(positions)
    
    # #4. 输入一个字符串,检查该字符串是否为回文,输出yes / no,要求用切片实现。
    # text=input('请输入一个字符串:')
    # if text==text[::-1]:
    #     print('yes')
    # else:
    #     print('no') 
    
    
    # #5. 接收两个正整数参数n和a(要求a为小于10的自然数),计算形如a+aa+aaa+…+aaa...aaa的表达式前n项的值。
    # def compute(n,a):
    #     return(sum(map(lambda i:int(str(a)*i),range(1,n+1))))
    # print(compute(3,5))
    
    
    # 例3-1
    import numpy as np
    print('整数42转换为浮点数结果为:', np.float64(42)) 
    print('浮点数42.0转换为整数结果为:', np.int8(42.0)) 
    print('浮点数42转换为布尔型转换结果为:', np.bool(42.0))
    print('整数0转换为布尔型结果为:', np.bool(0))
    print('布尔型数据True转换为浮点数结果为:', np.float(True))
    print('布尔型数据False转换为整型结果为:', np.int8(False))
    
    #例3-2
    arr1 = np.array([1, 2, 3, 4])
    print('创建的一维ndarray为:', arr1)
    arr2 = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
    print('创建的二维ndarray为:
    ', arr2)    
    print('ndarray arr2的维数为:', arr2.ndim)
    print('ndarray arr2的形状为:', arr2.shape)
    print('ndarray arr2的数据类型为:', arr2.dtype)
    print('ndarray arr2的元素个数为:', arr2.size)
    print('ndarray arr2每个元素的大小为:', arr2.itemsize)
    
    
    # 代码 3-3
    print('使用arange函数创建的ndarray为:', np.arange(0, 1, 0.1))
    print('使用linspace函数创建的ndarray为:
    ',np.linspace(0, 1, 12))
    print('使用logspace函数创建的ndarray为:
    ', np.logspace(0, 2, 20))
    print('使用zeros函数创建的ndarray为:
    ', np.zeros((2, 3)))
    print('使用eye函数创建的ndarray为:
     ', np.eye(3))
    print('使用diag函数创建的ndarray为:
    ',np.diag([1, 2, 3, 4]))
    print('使用ones函数的ndarray为:
    ', np.ones((2, 3)))
    
    # 代码 3-4
    print('random函数生成的随机数ndarray为:
    ', np.random.random(100))
    print('rand函数生成的服从均匀分布的随机数ndarray为:
    ', np.random.rand(4, 5))
    print('randn函数生成的服从正态分布的随机数ndarray为:
    ', np.random.randn(4, 5))
    print('randint函数生成的指定上下限的随机整数ndarray为:
    ',
          np.random.randint(low=2, high=10, size=[2, 5]))
    
    # 代码 3-5
    arr = np.arange(10)
    print('使用元素位置索引结果为:', arr[5])
    print('使用元素位置切片结果为:', arr[3:5])
    print('省略单个位置切片结果为:', arr[:5])
    print('使用元素反向位置切片结果为:', arr[:-1])
    arr[2:4] = 100, 101  # 修改对应下标的值
    print('修改后的ndarray arr为:', arr)
    print('元素位置等差索引结果为:', arr[1:-1:2])
    # 步长为负数时,开始位置必须大于结束位置
    print('元素位置负数步长等差索引结果为:', arr[5:1:-2])
    
    # 代码 3-6
    arr = np.array([[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [7, 8, 9, 10, 11]])
    print('创建的二维ndarray arr为:
    ', arr)
    print('切片结果为:', arr[0, 3:5])   # 访问第0行中第3和第4列的元素
    print('切片结果为:
    ', arr[1:, 2:])  # 访问第1和第2行中第2列、第3列和第4列的元素
    print('切片结果为:
    ', arr[:, 2])  # 访问第2列所有的元素
    # 索引第1、3行中第2列的元素
    mask = np.array([1, 0, 1], dtype=np.bool)
    print('使用布尔值ndarray索引结果为:', arr[mask, 2])
    arr = np.empty((8, 4))
    
    for i in range(8):
        arr[i] = i
    print('创建的二维ndarray arr为:
    ', arr)
    print('以特定顺序索引arr结果为:
    ', arr[[4, 3, 0, 6]])
    print('以特定逆序索引arr结果为:
    ', arr[[-3, -5, -7]])
    arr = np.array([np.arange(i*4, i*4+4) for i in np.arange(6)])
    print('创建的二维ndarray arr为:
    ', arr)
    # 返回一个ndarray最终的元素(1,0)、(5,3)、(4,1)、(2,2)
    print('使用二维ndarray索引arr结果为:', arr[[1, 5, 4, 2], [0, 3, 1, 2]])
    
    # 代码 3-7
    arr = np.arange(12)  # 创建一维ndarray
    print('创建的一维ndarray arr为:', arr)
    arr1 = arr.reshape(3, 4)  # 设置ndarray的维度
    print('改变形状后的ndarray arr1为:
    ', arr1)
    print('形状改变后ndarray arr1的维度为:', arr1.ndim)
    
    # 代码 3-7
    arr.resize(2, 6)
    print('resize改变原ndarray形状,ndarray arr变为:
    ', arr)
    arr.shape = (4, 3)
    print('通过重新设置shape属性后,ndarray arr为:
    ', arr)
    
    # 代码 3-8
    arr = np.arange(12).reshape(3, 4)
    print('创建的二维ndarray arr为:
    ', arr)
    print('ndarray arr横向展平后为:', arr.ravel())
    
    # 代码 3-8
    print('ndarray arr使用flatten方法横向展平后为:', arr.flatten())
    print('ndarray arr使用flatten方法纵向展平后为:', arr.flatten('F'))
    
    # 代码 3-9
    arr1 = np.arange(12).reshape(3, 4)
    print('创建的ndarray arr1为:
    ', arr1)
    arr2 = arr1*3
    print('创建的ndarray arr2为:
    ', arr2)
    print('hstack横向组合ndarray arr1与arr2为:
    ', np.hstack((arr1, arr2)))
    print('vstack纵向组合ndarray arr1与arr2为:
    ', np.vstack((arr1, arr2)))
    
    # 代码 3-9
    print('concatenate横向组合arr1与arr2为:
    ', np.concatenate((arr1, arr2), axis=1))
    print('concatenate纵向组合arr1与arr2为:
    ', np.concatenate((arr1, arr2), axis=0))
    print('dstack深度组合arr1与arr2为:
    ', np.dstack((arr1, arr2)))
    
    # 代码 3-10
    arr = np.arange(16).reshape(4, 4)
    print('创建的二维ndarray arr为:
    ', arr)
    print('hsplit横向分割arr为:
    ', np.hsplit(arr, 2))
    print('hsplit纵向分割arr为:
    ', np.vsplit(arr, 2))
    print('split横向分割arr为:
    ', np.split(arr, 2, axis=1))
    print('split纵向分割arr为:
    ', np.split(arr, 2, axis=0))
    
    
    # 代码 3-11
    np.random.seed(42)  #设置随机种子
    arr = np.random.randint(1, 10, size=12).reshape(4, 3)
    print('创建的随机数ndarray arr为:
    ', arr)
    print('默认排序后ndarray arr为:
    ', np.sort(arr))
    print('展平排序的ndarray arr为:', np.sort(arr, axis=None))
    
    # 代码 3-11
    print('横轴排序后ndarray arr为:
    ', np.sort(arr, axis=1))
    print('纵轴排序后ndarray arr为:
    ', np.sort(arr, axis=0))
    print('横轴排序后arr的下标为:
    ', np.argsort(arr, axis=1))
    print('展平排序后arr的下标为:', np.argsort(arr, axis=None))
    
    # 代码 3-12
    arr = np.arange(6, 12).reshape(2, 3)
    print('创建的ndarray arr为:
    ', arr)
    
    print('ndarray arr中最大元素的索引为:', np.argmax(arr))
    print('ndarray arr中最小元素的索引为:', np.argmin(arr))
    
    # 代码 3-12
    print('ndarray arr中各列最大元素的索引为:', np.argmax(arr, axis=0))
    print('ndarray arr中各行最小元素的索引为:', np.argmin(arr, axis=1))
    
    # 代码 3-13
    arr = np.arange(12).reshape(4,3)
    print('创建的ndarray arr为:
    ', arr)
    print('where输出ndarray arr满足条件的下标为:
    ', np.where(arr>6))
    arr1 = np.arange(12).reshape(3, 4)
    print('创建的ndarray arr1为:
    ', arr1)
    arr2 = np.arange(-12, 0).reshape(3, 4)
    print('创建的ndarray arr2为:
    ', arr2)
    exp = arr1>5
    print('arr1大于5的布尔ndarray为:
    ', exp)
    
    
    # 代码 3-13
    print('where函数搜索符合条件的arr1与arr2为:
    ', np.where(exp, arr1, arr2))
    arr = np.arange(9).reshape(3,  3)
    print('创建的ndarray arr为:
    ', arr)
    exp = (arr % 2) == 0
    print('arr能被2整除的布尔ndarray为:
    ', exp)
    print('arr基于条件exp提取的元素为:
    ', np.extract(exp, arr))
    
    
    import numpy as np
    x=np.array([1,2,3])
    y=np.array([4,5,6])
    print(x+y)
    
    # 代码 3-15
    import numpy as np
    arr = np.arange(-4, 5).reshape(3, 3)
    print('创建的ndarray arr为:
    ', arr)
    print('ndarray arr各元素的相反数为:
    ', np.negative(arr))
    print('ndarray arr各元素的绝对值为:
    ', np.absolute(arr))
    print('ndarray arr各元素的符号为:
    ', np.sign(arr))
    print('ndarray arr各元素的平方根为:
    ', np.sqrt(arr))
    print('ndarray arr各元素的自然对数为:
    ', np.log(arr))
    
    # 代码 3-16
    arr = np.arange(20).reshape(4, 5)
    print('创建的ndarray arr为:
    ', arr)
    print('ndarray arr各元素的和为:', np.sum(arr))
    print('ndarray arr各行的极差为:', np.ptp(arr, axis=1))
    print('ndarray arr各列的均值为:', np.mean(arr, axis=0))
    print('ndarray arr的中位数为:', np.median(arr))
    
    
    # 代码 3-16
    print('ndarray arr各行的上四分位数为:',np.percentile(arr, 75, axis =1))
    print('ndarray arr各列的下四分位数为:', np.percentile(arr, 25, axis =0))
    print('ndarray arr的标准差为:', np.std(arr))
    print('ndarray arr的方差为:', np.var(arr))
    print('ndarray arr的最小值为:', np.min(arr))
    print('ndarray arr的最大值为:', np.max(arr))
    
    # 代码 3-17
    arr = np.arange(1, 11)
    print('创建的ndarray arr为:', arr)
    print('ndarray arr的元素累计和为:', np.cumsum(arr))
    print('ndarray arr的元素累计积为:
    ', np.cumprod(arr))
    
    # # 代码 3-18
    # import numpy as np
    # arr = np.load('../data/arr.npy')
    # print('从二进制文件arr.npy读取的ndarray arr为:
    ', arr)
    # arr1 = np.load('../data/arr.npz')
    # print('从二进制文件arr.npz读取的第1个ndarray为:
    ', arr1['arr_0'])
    # print('从二进制文件arr.npz读取的第2个ndarray为:
    ', arr1['arr_1'])
    
    # # 代码 3-19
    # np.random.seed(123)
    # arr = np.random.rand(25).reshape(5, 5)
    # print('创建的ndarray arr为:
    ', arr)
    
    # np.save('../tmp/save_arr.npy', arr)
    # print('……存储成功……')
    
    # # 代码 3-20
    # arr1 = np.random.rand(36).reshape(6, 6)
    # print('创建的ndarray arr1为:
    ', arr1)
    # arr2 = np.random.rand(16).reshape(4, 4)
    # print('创建的ndarray arr2为:
    ', arr2)
    # np.savez('../tmp/save_arr.npz', arr1, arr2)
    
    # # 代码 3-20
    # arr3 = np.load('../tmp/save_arr.npz')
    # print('存取的第1个ndarray为:
    ', arr3['arr_0'])
    # np.savez('../tmp/save_kwds.npz', x=arr1, y=arr2)
    # arr4 = np.load('../tmp/save_kwds.npz')
    # print('存取的第2个ndarray为:
    ', arr4['y'])
    
    # # 代码 3-21
    # # 指定分隔符读入文本文件
    # arr = np.loadtxt("../data/arr.txt", delimiter=",")
    # print('读取的ndarray arr为:
    ', arr1)
    
    # arr = np.arange(36).reshape(6, 6)
    # print('创建的ndarray arr为:', arr)
    
    # np.savetxt("../tmp/savetxt.txt", arr, fmt="%d", delimiter=",")
    # print('……存储成功……')
    
    # 代码 3-23
    import pandas as pd
    list1=[0,1,2,3,4]
    series = pd.Series(list1, index = ['a', 'b', 'c', 'd', 'e'], name = 'list')
    print('Series位于第1位置的数据为:', series[0])
    print('Series中Index为a的数据为:', series['a'])
    bool = (series < 4)
    print('bool类型的Series为:
    ', bool)
    print('通过bool数据访问Series结果为:
    ', series[bool])
    
    # 代码 3-24
    # 更新元素
    series['a'] = 3
    print('更新后的Series为:
    ', series)
    series1 = pd.Series([4, 5], index = ['f', 'g'])
    # 追加Series
    print('在series插入series1后为:
    ', series.append(series1))
    # 新增单个数据
    series1['h'] = 7
    print('在series1插入单个数据后为:
    ', series1)
    # 删除数据
    series.drop('e', inplace = True)
    print('删除索引e对应数据后的series为:
    ', series)
    
    # 代码 3-25
    dict1 = {'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]}
    print('通过dict创建的DataFrame为:
    ', pd.DataFrame(dict1, index = ['a', 'b', 'c', 'd', 'e']))
    
    list2 = [[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]
    print('通过list创建的DataFrame为:
    ',
          pd.DataFrame(list2, index = ['a', 'b', 'c', 'd', 'e'], columns = ['col1', 'col2']))
    
    # 代码 3-26
    df = pd.DataFrame({'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]},
                       index = ['a', 'b', 'c', 'd', 'e'])
    print(df)
    print('DataFrame的Index为:', df.index)
    print('DataFrame的列标签为:', df.columns)
    print('DataFrame的轴标签为:', df.axes)
    print('DataFrame的维度为:', df.ndim)
    print('DataFrame的形状为:', df.shape)
    
    # 代码 3-28
    # 更新列
    df['col1'] = [10, 11, 12, 13, 14]
    print('更新列后的DataFrame为:
    ', df)
    # 插入列
    df['col3'] = [15, 16, 17, 18, 19]
    print('插入列后的DataFrame为:
    ', df)
    
    
    # 代码 3-28
    # 删除列
    df.drop(['col3'], axis = 1, inplace = True)
    print('删除col3列后的DataFrame为:
    ', df)
    # 删除行
    df.drop('a', axis = 0, inplace = True)
    print('删除a行后的DataFrame为:
    ', df)
    
    # 代码 3-29
    df = pd.DataFrame({'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]},    index = ['a', 'b', 'c', 'd', 'e'])
    print('创建的DataFrame为:
    ', df)
    
    # 访问单列数据
    print('DataFrame中col1列数据为:
    ', df['col1'])
    
    # 以属性的方式访问单列数据
    print('DataFrame中col1列数据为:
    ', df.col1)
    
    # 代码3-30
    # 访问单列多行数据
    print('DataFrame中col1列前3行数据为:
    ', df['col1'][0: 3])
    
    # 访问多列多行数据
    print('DataFrame中col1列、col2列前3行数据为:
    ', df[['col1', 'col2']][0: 3])
    
    # 访问多行数据
    print('DataFrame的前3行为:
    ', df[: ][0: 3])
    
    # 代码 3-31
    # 访问单列数据
    print('DataFrame中col1列数据为:
    ', df.loc[: , 'col1'])
    # 访问多列数据
    print('DataFrame中col1列、col2数据为:
    ', df.loc[: , ['col1', 'col2']])
    # 访问单行数据
    print('DataFrame中a行对应数据为:
    ', df.loc['a', :])
    # 访问多行数据
    print('DataFrame中a行、b行对应数据为:
    ', df.loc[['a', 'b'], :])
    # 行列结合访问数据
    print('DataFrame中a行、b行,col1列、col2列对应的数据为:
    ',
          df.loc[['a', 'b'], ['col1', 'col2']])
    # 接收bool数据
    print('DataFrame中col1列大于0的数据为:
    ', df.loc[df['col1'] > 0, :])
    # 接收函数
    print('DataFrame中col1列大于0的数据为:
    ', df.loc[lambda df: df['col1'] > 0, :])
    
    # 代码 3-32
    # 访问单列数据
    print('DataFrame中col1列数据为:
    ', df.iloc[: , 0])
    # 访问多列数据
    print('DataFrame中col1列、col2列数据为:
    ', df.iloc[: , [0, 1]])
    # 访问单行数据
    print('DataFrame中a行数据为:
    ', df.iloc[0, :])
    # 访问多行数据
    print('DataFrame中a行、b行数据为:
    ', df.iloc[[0, 1], :])
    # 行列结合访问数据
    print('DataFrame中a行、b行,col1列、col2列数据为:
    ', df.iloc[[0, 1], [0, 1]])
    
    # 代码 3-33
    multiindex = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
                  ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
    df1 = pd.DataFrame(np.arange(16).reshape(8, 2),
                       index=multiindex, columns=['column1', 'column2'])
    print('创建的DataFrame为:
    ', df1)
    
    print('DataFrame的层次化索引为:
    ', df1.index)
    
    # 代码 3-34
    print('访问DataFrame第1索引层bar,第2索引层two结果为:
    ',
          df1.loc[('bar', 'two'), :])
    
    print('访问DataFrame第1索引层bar、baz、foo,第2索引层one、two结果为:
    ',
          df1.loc[(['bar', 'baz', 'foo'], ['one', 'two']), :])
    
    print('访问DataFrame第1索引层bar、baz、foo,第2索引层one、two结果为:
    ',
          df1.loc[(slice('bar', 'foo'), slice(None)), :])
    
    # 代码 3-35
    # 接收单个标签
    idx = pd.IndexSlice
    print('访问DataFrame第1索引层bar,第2索引层two结果为:
    ', df1.loc[idx['bar', 'two'], :])
    
    # 接收标签list
    print('访问DataFrame第1索引层bar、foo,第2索引层two结果为:
    ',
          df1.loc[idx[['bar', 'foo'], 'two'], :])
    
    # 接收标签切片
    print('访问DataFrame第1索引层bar到foo,第2索引层two结果为:
    ',
          df1.loc[idx['bar': 'foo', 'one'], :])
    
    # 接收bool数组
    con = df1['column1']>0
    print('访问DataFrame第1索引层bar到foo,第二索引层对应的'
          'column1列大于0结果为:
    ',df1.loc[idx['bar': 'foo', con], :])
    
    # 代码 3-36
    # 按行索引排序
    print('按行索引排序后的DataFrame为:
    ', df.sort_index(axis = 0))
    # 按列索引降序排列
    print('按列索引降序排列后的DataFrame为:
    ', df.sort_index(axis = 1, ascending = False))
    # 按列排序
    print('按col2列排序后的DataFrame为:
    ', df.sort_values('col2'))
    # 按行降序排列
    print('按列降序排列后的DataFrame为:
    ', df.sort_values('a', axis = 1, ascending = False))
    
    print('按col2列排序,返回前2个最小值:
    ', df.nsmallest(2, 'col2'))
    
    print('按col2列排序,返回前2个最大值:
    ', df.nlargest(2, 'col2'))
    
    # 代码 3-37
    df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'], 
                        'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})
    df3 = pd.DataFrame({'key': ['K0', 'K1', 'K2'], 'B': ['B0', 'B1', 'B2']})
    # 横向堆叠df2、df3
    print('横向堆叠df2、df3后的DataFrame为:
    ', pd.concat([df2, df3], axis = 1))
    
    # 横向堆叠(内连)df2、df3
    print('横向堆叠(内连)df2、df3后的DataFrame为:
    ',
          pd.concat([df2, df3], axis = 1, join = 'inner'))
    
    # 代码 3-38
    print('横向堆叠df2、df3后的DataFrame为:
    ', df2.join(df3, rsuffix = '_2'))
    # 纵向堆叠df2、df3
    print('纵向堆叠df2、df3后的DataFrame为:
    ', pd.concat([df2, df3], axis = 0))
    
    # 纵向堆叠(内连)df2、df3
    print('纵向堆叠(内连)df2、df3后的DataFrame为:
    ',
          pd.concat([df2, df3], axis = 0, join = 'inner'))
    print('纵向堆叠df2、df3后的DataFrame为:
    ', df2.append(df3))
    
    # 代码 3-39
    print('以列key为键,内连df2、df3后的DataFrame为:
    ',
    pd.merge(df2, df3, on = 'key', how = 'inner'))
    
    # # 代码 3-40
    # df = pd.read_csv('../data/meal_order_info.csv', encoding = 'gbk')
    # print('读取的CSV文件前5行数据为:
    ', df.head())
    
    
    #  # 代码 3-42
    # df = pd.read_excel('../data/users_info.xlsx', encoding = 'gbk')
    # print('读取的Excel文件前5行数据为:
    ', df.head())
    
    
    # 代码 3-43
    import matplotlib.pyplot as plt
    X=np.random.randn(100)
    Y=np.random.randn(100)
    plt.scatter(X,Y)
    
    #代码3-44
    years=[1950,1960,1970,1980,1990,2000,2010]
    gdp=[300.2,543.3,1075.9,2862.5,5979.6,10289.7,14958.3]
    plt.plot(years,gdp,color='r')
    
    #代码3-45
    data=np.random.randint(1,10,10)
    data
    plt.pie(data)
    
    #代码3-46
    x=np.random.normal(size=100)
    plt.hist(x,bins=30)
    
    #代码3-47
    data=[23,85,72,43,52]
    plt.bar([1,2,3,4,5],data)
    
    #代码3-48
    list10=np.random.randint(1,100,10)
    plt.boxplot(list10)
    
    # 代码 3-42
    import matplotlib.pyplot as plt
    import numpy as np
    fig = plt.figure(figsize = (6, 6), dpi = 80)  # 创建画布。大小为6×6,像素为80
    x = np.linspace(0, 1, 1000)
    fig.add_subplot(2, 1, 1)  # 分为2×1图形阵,选择第1张图片绘图
    plt.title('y=x^2 & y=x')  # 添加标题
    plt.xlabel('x')  # 添加x轴名称‘x’
    plt.ylabel('y')  # 添加y轴名称‘y’
    plt.xlim((0, 1))  # 指定x轴范围(0,1)
    plt.ylim((0, 1))  # 指定y轴范围(0,1)
    plt.xticks([0, 0.3, 0.6, 1])  # 设置x轴刻度
    plt.yticks([0, 0.5, 1])  # 设置y轴刻度
    plt.plot(x, x ** 2)
    plt.plot(x, x)
    plt.legend(['y=x^2', 'y=x'])  # 添加图例
    
    
    #代码3-49
    fig=plt.figure(figsize=(10,6))
    ax1=fig.add_subplot(2,2,1)
    ax2=fig.add_subplot(2,2,2)
    ax3=fig.add_subplot(2,2,3)
    ax4=fig.add_subplot(2,2,4)
    ax1.scatter(years,gdp)
    ax2.plot(years,gdp)
    ax3.bar(years,gdp)
    ax4.hist(years,gdp)
    
    
    # 三维曲面
    import matplotlib.pyplot as plt
    import numpy as np
    
    x,y=np.mgrid[-2:2:20j,-2:2:20j]
    z=50*np.sin(x+y*2)
    
    ax=plt.subplot(111,projection='3d')
    ax.plot_surface(x,y,z,rstride=3,cstride=2,cmap=plt.cm.coolwarm)
    
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    
    # 三维柱状图
    x=np.random.randint(0,40,10)
    y=np.random.randint(0,40,10)
    z=80*abs(np.sin(x+y))
    
    ax=plt.subplot(projection='3d')
    ax.bar3d(x,y,np.zeros_like(z),dx=1,dy=1,dz=z,color='red')
    
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    
    
    # 三维散点图
    x=np.random.randint(0,40,30)
    y=np.random.randint(0,40,30)
    z=np.random.randint(0,40,30)
    
    ax=plt.subplot(projection='3d')
    for xx,yy,zz in zip(x,y,z):
        color='r'
        if 10<zz<20:
            color='b'
        elif zz>=20:
            color='g'
        ax.scatter(xx,yy,zz,c=color,marker='*',s=160,linewidth=1,edgecolor='b')
    
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    
    #代码4-1
    import pandas as pd
    df = pd.read_html('http://worldcup.2014.163.com/schedule/')
    
    # #代码4-2
    # import requests
    # from bs4 import BeautifulSoup
    # data = []
    # wb_data = requests.get('http://www.kugou.com/yy/rank/home/1-8888.html')
    # soup = BeautifulSoup(wb_data.text,'lxml')
    # ranks = soup.select('span.pc_temp_num')
    # titles = soup.select('div.pc_temp_songlist > ul > li > a')
    # times = soup.select('span.pc_temp_tips_r > span')
    
    # for rank,title,time in zip(ranks,titles,times):
    #     a = {
    #         'rank':rank.get_text().strip(),
    #         'singer':title.get_text().split('-')[0],
    #         'song':title.get_text().split('-')[1],
    #         'time':time.get_text().strip()
    #     }
    #     data.append(a)
    
    # #代码4-3
    # import json
    # f = open('D:/data/eueo2012.json')
    # obj = f.read()
    # result = json.loads(obj)
    # result
    
    # 代码4-5
    import numpy as np
    df1=pd.DataFrame([[3,5,3],[1,6,np.nan],['lili',np.nan,'pop'],[np.nan,'a','b']])
    
    print(df1.isnull().sum())
    df1.isnull().sum().sum()
    
    #代码4-7
    data={'name':['张飒','李苏','张飒','万明'],    'sex':['female','male','female','male'],
          'year':[2001,2002,2001,2002],
          'city':['北京','上海','北京','北京']}
    df3=pd.DataFrame(data)
    df3.duplicated()
    df3.drop_duplicates()
    df3.drop_duplicates(keep='last')
    
    #代码4-8
    data1={'name':['张飒','李苏','张飒','万明'],
          'sex':['female','male','','male'],
          'year':[2001,2002,2001,2002],
          'city':['北京','上海','','北京']}
    df4=pd.DataFrame(data1)
    df4.replace('','不详')
    df4.replace(['',2001],['不详',2002])
    df4.replace({'':'不详',2001:2002})
    
    
    #代码4-9
    data2={'name':['张三','李四','王五','小明'],
           'math':[79,52,63,92]}
    df5=pd.DataFrame(data2)
    def f(x):
        if x>=90:
            return '优秀'
        elif x>=70:
            return '良好'
        elif x>=60:
            return '合格'
        else:
            return '不合格'
    df5['class']=df5['math'].map(f)
    
    #代码4-10
    df6=pd.DataFrame(np.arange(10),columns=['X'])
    df6['Y']=2*df6['X']+0.5
    df6.iloc[9,1]=185
    df6.plot(kind='scatter',x='X',y='Y')
    
    #代码4-11
    df7=pd.DataFrame({'朝向':['','','','西',''],
                   '价格':[1200,2100,2300,2900,1400]})
    pd.get_dummies(df7['朝向'])
    
    #代码4-12
    from pandas import Series
    df8=pd.DataFrame({'朝向':['东/北','西/南','','西/北',''],
                   '价格':[1200,2100,2300,2900,1400]})
    dummy=df8['朝向'].apply(lambda x:Series(x.split('/')).value_counts())
    
    #代码4-13
    price=pd.DataFrame({'fruit':['apple','banana','orange'],
                     'price':[23,32,45]})
    amount=pd.DataFrame({'fruit':['apple','banana','apple','apple','banana','pear'],
                      'amount':[5,3,6,3,5,7]})
    pd.merge(amount,price)
    pd.merge(amount,price,how='left')
    pd.merge(amount,price,how='right')
    pd.merge(amount,price,how='outer')
    
    #代码4-14
    s1=Series([0,1],index=['a','b'])
    s2=Series([2,3],index=['c','d'])
    s3=Series([4,5],index=['e','f'])
    pd.concat([s1,s2,s3])
    pd.concat([s1,s2,s3],axis=1)
    
    
    #代码4-15
    import pandas as pd
    import numpy as np
    df10=pd.DataFrame({'a':[3.0,np.nan,6.0,np.nan],'b':[np.nan,4.0,6.0,np.nan]})
    df11=pd.DataFrame({'a':[0,1,2,3,4],'b':[0,1,2,3,4]})
    df10.combine_first(df11)
    
    df10=pd.DataFrame({'a':[3.0,np.nan,6.0,np.nan],'b':[np.nan,4.0,6.0,np.nan]})
    df11=pd.DataFrame({'a':[0,1,2,3,4],'b':[0,1,2,3,4]})
    
    df10.combine_first(df11)
    
    #代码4-16
    from pandas import Series,DataFrame
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt 
    import matplotlib as mpl
    import seaborn as sns  #导入seaborn绘图库
    iris_data = pd.read_csv(open(r'E:资料数据集seaborn-data-masteriris.csv'))
    iris_data.head()
    iris_data.shape
    iris_data.describe()
    
    # iris_data['class'].unique()
    # iris_data.ix[iris_data['class'] == 'versicolor', 'class'] = 'Iris-versicolor'
    # iris_data.ix[iris_data['class'] == 'Iris-setossa', 'class'] = 'Iris-setosa'
    # iris_data['class'].unique()
    # sns.pairplot(iris_data, hue='class')
    # iris_data.ix[iris_data['class'] == 'Iris-setosa', 'sepal_width_cm'].hist()
    # iris_data = iris_data.loc[(iris_data['class'] != 'Iris-setosa') | (iris_data['sepal_width_cm'] >= 2.5)]
    # iris_data.loc[iris_data['class'] == 'Iris-setosa', 'sepal_width_cm'].hist()
    
    # iris_data.loc[(iris_data['class'] == 'Iris-versicolor') &
    #               (iris_data['sepal_length_cm'] < 1.0)]
    # iris_data.loc[(iris_data['class'] == 'Iris-versicolor') &
    #               (iris_data['sepal_length_cm'] < 1.0),
    #               'sepal_length_cm'] *= 100.0
    # iris_data.isnull().sum()
    # iris_data[iris_data['petal_width_cm'].isnull()]
    # iris_data.dropna(inplace=True)
    # iris_data.to_csv('H:python数据分析数据iris-clean-data.csv', index=False)
    # iris_data = pd.read_csv(open('H:python数据分析数据iris-clean-data.csv'))
    # iris_data.head()
    
    # iris_data.shape
    # sns.pairplot(iris_data, hue='class')
    # iris_data.boxplot(column='petal_length_cm', by='class',grid=False,figsize=(6,6))
    
    # # 代码 4-17
    # import pandas as pd
    # import numpy as np
    # df = pd.read_csv('D:/data/Concrete.csv', encoding = 'gbk')
    # print('数据框df每列对应的最大值为:
    ', np.max(df), '
    ', '数据框df每列对应的最小值为:
    ', np.min(df))
    # print('数据框df每列对应的均值为:
    ', np.mean(df))
    # print('数据框df对应的中位数为:', np.median(df))
    # print('数据框df每列对应的标准差为:
    ', np.std(df))
    # print('数据框df每列对应的方差为:
    ', np.var(df))
    
    # # 代码 4-18
    # print('数据框df每列对应的最大值为:
    ', df.max(), '
    ','数据框df每列对应的最小值为:
    ', df.min())
    # print('数据框df每列对应的均值为:
    ', df.mean())
    # print('数据框df每列对应的中位数为:
    ', df.median())
    # print('数据框df每列对应的标准差为:
    ', df.std())
    # print('数据框df每列对应的方差为:
    ', df.var())
    # print('使用describe方法的描述性统计结果为:
    ', df.describe())
    
    
    # # 代码 4-19
    # df1 = pd.DataFrame({'col1': list('abca'), 'col2': list('bccd')}, dtype = 'category')
    # print('使用describe方法的描述性统计结果为:
    ', df1.describe())
    # print('DataFrame的info信息为:
    ')
    # df.info()
    
    # # 代码 4-20
    # station = pd.read_csv('D:/data/Station.csv', encoding = 'gbk')
    # group = station.groupby('station')
    # print('以station为分组键,创建的GroupBy对象为:
    ', group)
    
    # print('分组数据的均值前5行结果为:
    ', group.mean().head())
    # print('分组数据的和前5行结果为:
    ',group.sum().head())
    # print('分组数据的最大值前5行结果为:
    ',group.max().head())
    
    # # 代码 4-21
    # print('分组的均值前5行结果为:
    ', group.agg(np.mean).head())
    # def f(x):
    #     return x.max() - x.min()
    # group1 = group.agg(f)
    # print('分组的极差前5行结果为:
    ', group1.head())
    # group2 = group.agg([np.mean, np.sum])
    # print('分组的均值和总和前5行结果为:
    ', group2.head())
    # group3 = group.agg({'on_man': np.mean, 'off_man': np.sum})
    # print('列on_man应用均值函数,列off_man应用汇总函数前5行结果为:
    ', group3.head())
    
    
    # # 代码 4-22
    # print('分组的均值前5行结果为:
    ', group.apply(np.mean).head())
    
    # def f(x):
    #     result = x[0: 2]
    #     return result
    # print('分组的前两个数据前5行结果为:
    ', group.apply(f).head())
    
    # # 代码 4-23
    # print('对分组应用均值函数,返回的DataFrame前5行数据为:
    ',
    #       group.transform(np.mean).head())
    
    # def f(x):
    #     result = x*2
    #     return result
    # print('对分组的每个元组乘以2,返回的DataFrame前5行数据为:
    ',   group.transform(f).head())
    
    # 代码 4-24
    dit = {'one': ['a', 'b', 'b', 'b', 'a'], 'two': [0, 1, 2, 3, 4],
         'three': [5, 6, 7, 8, 9], 'four': ['x', 'x', 'y', 'y', 'y']}
    df = pd.DataFrame(dit)
    tdf = pd.pivot_table(df, index=['four'], columns=['one'])
    print('创建的透视表为:
    ', tdf)
    
    tdf = pd.pivot_table(df, index=['four'], columns=['one'], aggfunc = np.sum)
    print('分组和的透视表为:
    ', tdf)
    # 代码 4-25
    cdf = pd.crosstab(index = df['four'], columns = df['one'])
    print('创建的交叉表为:
    ', cdf)
    
    cdf = pd.pivot_table(df, values = 'two', index = ['four'], columns = ['one'], 
                         aggfunc = (lambda x: len(x)))
    print('使用pivot_table函数创建的交叉表为:
    ', cdf)
    
    
    导包
    import numpy as np
    创建二维数组
    x = np.matrix([[1,2,3],[4,5,6]])
    创建一维数组
    y = np.matrix([1,2,3,4,5,6])
    x 的第二行第二列元素
    x[1,1]
    矩阵的乘法
    x*y
    复制代码
    # 相关系数矩阵,可使用在列表元素数组矩阵
    # 负相关
    np.corrcoef([1,2,3],[8,5,4])
    '''
    array([[ 1.        , -0.96076892],
           [-0.96076892,  1.        ]])
    '''
    # 正相关
    np.corrcoef([1,2,3],[4,5,7])
    '''
    array([[1.        , 0.98198051],
           [0.98198051, 1.        ]])
    '''
    复制代码
    矩阵的方差
    np.cov([1,1,1,1,1])
    矩阵的标准差
    np.std([1,1,1,1,1])
    垂直堆叠矩阵
    z = np.vstack((x,y))
    矩阵的协方差
    np.cov(z)
    np.cov(x,y)
    标准差
    np.std(z)
    列向标准差
    np.std(z,axis = 1)
    方差
    np.cov(x)
    特征值和特征向量
    A = np.array([[1,-3,3],[3,-5,3],[6,-6,4]])
    e,v = np.linalg.eig(A)
    e 为特征值, v 为特征向量
    矩阵与特征向量的乘积
    np.dot(A,v)
    特征值与特征向量的乘积
    e * v
    验证两个乘积是否相等
    np.isclose(np.dot(A,v),(e * v))
    行列式 |A - λE| 的值应为 0
    np.linalg.det(A-np.eye(3,3)*e)
    逆矩阵
    y = np.linalg.inv(x)
    复制代码
    矩阵的乘法(注意先后顺序)
    x * y
    '''
    matrix([[ 1.00000000e+00,  5.55111512e-17,  1.38777878e-17],
            [ 5.55111512e-17,  1.00000000e+00,  2.77555756e-17],
            [ 1.77635684e-15, -8.88178420e-16,  1.00000000e+00]])
    '''
    y * x
    '''
    matrix([[ 1.00000000e+00, -1.11022302e-16,  0.00000000e+00],
            [ 8.32667268e-17,  1.00000000e+00,  2.22044605e-16],
            [ 6.93889390e-17,  0.00000000e+00,  1.00000000e+00]])
    '''
    复制代码
    求解线性方程组
    a = np.array([[3,1],[1,2]])
    b = np.array([9,8])
    x = np.linalg.solve(a,b)
    最小二乘解:返回解,余项,a 的秩,a 的奇异值
    np.linalg.lstsq(a,b)
    # (array([2., 3.]), array([], dtype=float64), 2, array([3.61803399, 1.38196601]))
    复制代码
    计算向量和矩阵的范数
    x = np.matrix([[1,2],[3,-4]])
    
    np.linalg.norm(x)
    # 5.477225575051661
    
    np.linalg.norm(x,-2)
    # 1.9543950758485487
    
    np.linalg.norm(x,-1)
    # 4.0
    
    np.linalg.norm(x,1)
    # 6.0
    
    np.linalg.norm([1,2,0,3,4,0],0)
    # 4.0
    
    np.linalg.norm([1,2,0,3,4,0],2)
    # 5.477225575051661
    复制代码
    复制代码
    奇异值分解
    a = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
    
    u,s,v = np.linalg.svd(a)
    
    u
    '''
    matrix([[-0.21483724,  0.88723069,  0.40824829],
            [-0.52058739,  0.24964395, -0.81649658],
            [-0.82633754, -0.38794278,  0.40824829]])
    '''
    s
    '''
    array([1.68481034e+01, 1.06836951e+00, 4.41842475e-16])
    '''
    v
    '''
    matrix([[-0.47967118, -0.57236779, -0.66506441],
            [-0.77669099, -0.07568647,  0.62531805],
            [-0.40824829,  0.81649658, -0.40824829]])
    '''
    
    # 验证
    u * np.diag(s) * v
    '''
    matrix([[1., 2., 3.],
            [4., 5., 6.],
            [7., 8., 9.]])
    '''
    复制代码
    实现矩阵的转置
    x.T
    元素平均值
    x.mean()
    纵向平均值
    x.mean(axis = 0)
    横向平均值
    x.mean(axis = 1)
    所有元素之和
    x.sum()
    横向最大值
    x.max(axis = 1)
    横向最大值的索引下标
    x.argmax(axis = 1)
    对角线元素
    x.diagonal()
    非零元素下标
    x.nonzero()
    创建数组
    
    np.array([1,2,3,4])
    np.array((1,2,3,4))
    np.array(range(4)) # 不包含终止数字
    # array([0, 1, 2, 3])
    # 使用 arange(初始位置=0,末尾,步长=1)
    np.arange(1,8,2)
    # array([1, 3, 5, 7])
    生成等差数组,endpoint 为 True 则包含末尾数字
    np.linspace(1,3,4,endpoint=False)
    # array([1. , 1.5, 2. , 2.5])
    np.linspace(1,3,4,endpoint=True)
    # array([1.        , 1.66666667, 2.33333333, 3.        ])
    创建全为零的一维数组
    np.zeros(3)
    创建全为一的一维数组
    np.ones(4)
    np.linspace(1,3,4)
    # array([1.        , 1.66666667, 2.33333333, 3.        ])
    复制代码
    np.logspace(起始数字,终止数字,数字个数,base = 10) 对数数组
    np.logspace(1,3,4)
    # 相当于 10 的 linspace(1,3,4) 次方
    # array([  10.        ,   46.41588834,  215.443469  , 1000.        ])
    
    
    
    np.logspace(1,3,4,base = 2)
    # 2 的 linspace(1,3,4) 次方
    # array([2.       , 3.1748021, 5.0396842, 8.       ])
    复制代码
    创建二维数组(列表嵌套列表)
    np.array([[1,2,3],[4,5,6]])
    # 创建全为零的二维数组
    # 两行两列
    np.zeros((2,2))
    三行两列
    np.zeros((3,2))
    复制代码
    # 创建一个单位数组
    np.identity(3)
    
    '''
    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])
    '''
    复制代码
    复制代码
    创建一个对角矩阵,(参数为对角线上的数字)
    np.diag((1,2,3))
    
    '''
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3]])
    '''
    复制代码
    第一行元素
    n[0]
    第一行第三列元素
    n[0,2]
    第一行和第二行的元素
    n[[0,1]]
    第一行第三列,第三行第二列,第二行第一列
    n[[0,2,1],[2,1,0]]
    将数组倒序
    a[::-1]
    步长为 2
    a[::2]
    从 0 到 4 的元素
    a[:5]
    复制代码
    变换 c 的矩阵行和列
    
    c = np.arange(16)
    # array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
    
    c.shape = 4,4
    '''
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11],
           [12, 13, 14, 15]])
    '''
    复制代码
    第一行,第三个元素到第五个元素(如果没有则输出到末尾截止)
    c[0,2:5]
    第二行元素
    c[1]
    第三行到第六行,第三列到第六列
    c[2:5,2:5]
    第二行第三列元素和第三行第四列元素
    c[[1,2],[2,3]]
    第一行和第三行的第二列到第三列的元素
    c[[0,2],1:3]
    第一列和第三列的所有横行元素
    c[:,[0,2]]
    第三列所有元素
    c[:,2]
    第二行和第四行的所有元素
    c[[1,3]]
    第一行的第二列,第四列元素,第四行的第二列,第四列元素
    c[[0,3]][:,[1,3]]
    使用 * 进行相乘
    x*2
    使用 / 进行相除
    x / 2
    2 / x
    使用 // 进行整除
    x//2
    10//x
    使用 ** 进行幂运算
    x**3
    2 ** x
    使用 + 进行相加
    x + 2
    使用 % 进行取模
    x % 3
    使用 + 进行相加
    np.array([1,2,3,4]) + np.array([11,22,33,44])
    
    
    np.array([1,2,3,4]) + np.array([3])
    # array([4, 5, 6, 7])
    数组的内积运算(对应位置上元素相乘)
    np.dot(x,y)
    sum(x*y)
    将数组中大于 0.5 的元素显示
    n[n>0.5]
    找到数组中 0.05 ~ 0.4 的元素总数
    sum((n > 0.05)&(n < 0.4))
    是否都大于 0.2
    np.all(n > 0.2)
    是否有元素小于 0.1
    np.any(n < 0.1)
    复制代码
    在 a 中是否有大于 b 的元素
    a > b
    # array([False,  True, False])
    
    # 在 a 中是否有等于 b 的元素
    a == b
    # array([False, False,  True])
    
    # 显示 a 中 a 的元素等于 b 的元素
    a[a == b]
    # array([7])
    复制代码
    显示 a 中的偶数且小于 5 的元素
    a[(a%2 == 0) & (a < 5)]
    生成一个随机数组
    np.random.randint(0,6,3)
    生成一个随机数组(二维数组)
    np.random.randint(0,6,(3,3))
    生成十个随机数在[0,1)之间
    np.random.rand(10)
    '''
    array([0.9283789 , 0.43515554, 0.27117021, 0.94829333, 0.31733981,
           0.42314939, 0.81838647, 0.39091899, 0.33571004, 0.90240897])
    '''
    从标准正态分布中随机抽选出3个数
    np.random.standard_normal(3)
    返回三页四行两列的标准正态分布数
    np.random.standard_normal((3,4,2))
    x = np.arange(8)
    在数组尾部追加一个元素
    np.append(x,10)
    在数组尾部追加多个元素
    np.append(x,[15,16,17])
    使用 数组下标修改元素的值
    x[0] = 99
    在指定位置插入数据
    np.insert(x,0,54)
    创建一个多维数组
    x = np.array([[1,2,3],[11,22,33],[111,222,333]])
    
    修改第 0 行第 2 列的元素值
    x[0,2] = 9
    行数大于等于 1 的,列数大于等于 1 的置为 1
    x[1:,1:] = 1
    复制代码
    # 同时修改多个元素值
    x[1:,1:] = [7,8]
    '''
    array([[  1,   2,   9],
           [ 11,   7,   8],
           [111,   7,   8]])
    '''
    x[1:,1:] = [[7,8],[9,10]]
    '''
    array([[  1,   2,   9],
           [ 11,   7,   8],
           [111,   9,  10]])
    '''
    复制代码
    查看数组的大小
    n.size
    将数组分为两行五列
    n.shape = 2,5
    显示数组的维度
    n.shape
    设置数组的维度,-1 表示自动计算
    n.shape = 5,-1
    将新数组设置为调用数组的两行五列并返回
    x = n.reshape(2,5)
    复制代码
    x = np.arange(5)
    # 将数组设置为两行,没有数的设置为 0
    x.resize((2,10))
    '''
    array([[0, 1, 2, 3, 4, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
    '''
    
    
    # 将 x 数组的两行五列形式显示,不改变 x 的值
    np.resize(x,(2,5))
    '''
    array([[0, 1, 2, 3, 4],
           [0, 0, 0, 0, 0]])
    '''
    复制代码
    x = np.array([1,4,5,2])
    # array([1, 4, 5, 2])
    
    # 返回排序后元素的原下标
    np.argsort(x)
    # array([0, 3, 1, 2], dtype=int64)
    输出最大值的下标
    x.argmax( )
    输出最小值的下标
    x.argmin( )
    对数组进行排序
    x.sort( )
    每个数组元素对应的正弦值
    np.sin(x)
    每个数组元素对应的余弦值
    np.cos(x)
    对参数进行四舍五入
    np.round(np.cos(x))
    对参数进行上入整数 3.3->4
    np.ceil(x/3)
    复制代码
    # 分段函数
    x = np.random.randint(0,10,size=(1,10))
    # array([[0, 3, 6, 7, 9, 4, 9, 8, 1, 8]])
    
    # 大于 4 的置为 0
    np.where(x > 4,0,1)
    # array([[1, 1, 0, 0, 0, 1, 0, 0, 1, 0]])
    
    # 小于 4 的乘 2 ,大于 7 的乘3
    np.piecewise(x,[x<4,x>7],[lambda x:x*2,lambda x:x*3])
    # array([[ 0,  6,  0,  0, 27,  0, 27, 24,  2, 24]])
    
    
    
    
    导包
    import pandas as pd
    设置输出结果列对齐
    pd.set_option('display.unicode.ambiguous_as_wide',True)
    pd.set_option('display.unicode.east_asian_width',True)
    创建 从 0 开始的非负整数索引
    s1 = pd.Series(range(1,20,5))
    使用字典创建 Series 字典的键作为索引
    s2 = pd.Series({'语文':95,'数学':98,'Python':100,'物理':97,'化学':99})
    修改 Series 对象的值
    s1[3] = -17
    查看 s1 的绝对值
    abs(s1)
    将 s1 所有的值都加 5、使用加法时,对所有元素都进行
    s1 + 5
    在 s1 的索引下标前加入参数值
    s1.add_prefix(2)
    s2 数据的直方图
    s2.hist()
    每行索引后面加上 hany
    s2.add_suffix('hany')
    查看 s2 中最大值的索引
    s2.argmax()
    查看 s2 的值是否在指定区间内
    s2.between(90,100,inclusive = True)
    查看 s2 中 97 分以上的数据
    s2[s2 > 97]
    查看 s2 中大于中值的数据
    s2[s2 > s2.median()]
    s2 与数字之间的运算,开平方根 * 10 保留一位小数
    round((s2**0.5)*10,1)
    s2 的中值
    s2.median()
    s2 中最小的两个数
    s2.nsmallest(2)
    s2 中最大的两个数
    s2.nlargest(2)
    Series 对象之间的运算,对相同索引进行计算,不是相同索引的使用 NaN
    pd.Series(range(5)) + pd.Series(range(5,10))
    对 Series 对象使用匿名函数
    pd.Series(range(5)).pipe(lambda x,y,z :(x**y)%z,2,5)
    pd.Series(range(5)).pipe(lambda x:x+3)
    pd.Series(range(5)).pipe(lambda x:x+3).pipe(lambda x:x*3)
    对 Series 对象使用匿名函数
    pd.Series(range(5)).apply(lambda x:x+3)
    查看标准差
    pd.Series(range(0,5)).std()
    查看无偏方差
    pd.Series(range(0,5)).var()
    查看无偏标准差
    pd.Series(range(0,5)).sem()
    查看是否存在等价于 True 的值
    any(pd.Series([3,0,True]))
    查看是否所有的值都等价于 True
    all(pd.Series([3,0,True]))
    创建一个 DataFrame 对象
    dataframe = pd.DataFrame(np.random.randint(1,20,(5,3)),
                             index = range(5),
                             columns = ['A','B','C'])
    索引为时间序列
    dataframe2 = pd.DataFrame(np.random.randint(5,15,(9,3)),
                              index = pd.date_range(start = '202003211126',
                                                    end = '202003212000',
                                                    freq = 'H'),
                              columns = ['Pandas','爬虫','比赛'])
    使用字典进行创建
    dataframe3 = pd.DataFrame({'语文':[87,79,67,92],
                               '数学':[93,89,80,77],
                               '英语':[88,95,76,77]},
                              index = ['张三','李四','王五','赵六'])
    创建时自动扩充
    dataframe4 = pd.DataFrame({'A':range(5,10),'B':3})
    查看周几
    dff['日期'] = pd.to_datetime(data['日期']).dt.weekday_name
    按照周几进行分组,查看交易的平均值
    dff = dff.groupby('日期').mean().apply(round)
    dff.index.name = '周几'
    对姓名和日期进行分组,并进行求和
    dff = dataframe.groupby(by = ['姓名','日期'],as_index = False).sum()
    将 dff 的索引,列 设置成透视表形式
    dff = dff.pivot(index = '姓名',columns = '日期',values = '交易额')
    查看前一天的数据
    dff.iloc[:,:1]
    交易总额小于 4000 的人的前三天业绩
    dff[dff.sum(axis = 1) < 4000].iloc[:,:3]
    工资总额大于 2900 元的员工的姓名
    dff[dff.sum(axis = 1) > 2900].index.values
    显示前两天每一天的交易总额以及每个人的交易金额
    dataframe.pivot_table(values = '交易额',index = '姓名',
                          columns = '日期',aggfunc = 'sum',margins = True).iloc[:,:2]
    显示每个人在每个柜台的交易总额
    dff = dataframe.groupby(by = ['姓名','柜台'],as_index = False).sum()
    dff.pivot(index = '姓名',columns = '柜台',values = '交易额')
    查看每人每天的上班次数
    dataframe.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'count',margins = True).iloc[:,:1]
    查看每个人每天购买的次数
    dataframe.pivot_table(values = '交易额',index = '姓名',columns = '日期',aggfunc = 'count',margins = True)
    每个人每天上过几次班
    pd.crosstab(dataframe.姓名,dataframe.日期,margins = True).iloc[:,:2]
    每个人每天去过几次柜台
    pd.crosstab(dataframe.姓名,dataframe.柜台)
    将每一个人在每一个柜台的交易总额显示出来
    pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc='sum')
    每个人在每个柜台交易额的平均值,金额/天数
    pd.crosstab(dataframe.姓名,dataframe.柜台,dataframe.交易额,aggfunc = 'mean').apply(lambda  num:round(num,2) )
    对 5 的余数进行分组
    dataframe.groupby(by = lambda num:num % 5)['交易额'].sum()
    查看索引为 7 15 的交易额
    dataframe.groupby(by = {7:'索引为7的行',15:'索引为15的行'})['交易额'].sum()
    查看不同时段的交易总额
    dataframe.groupby(by = '时段')['交易额'].sum()
    各柜台的销售总额
    dataframe.groupby(by = '柜台')['交易额'].sum()
    查看每个人在每个时段购买的次数
    count = dataframe.groupby(by = '姓名')['时段'].count()
    每个人的交易额平均值并排序
    dataframe.groupby(by = '姓名')['交易额'].mean().round(2).sort_values()
    每个人的交易额,apply(int) 转换为整数
    dataframe.groupby(by = '姓名').sum()['交易额'].apply(int)
    每一个员工交易额的中值
    data = dataframe.groupby(by = '姓名').median()
    查看交易额对应的排名
    data['排名'] = data['交易额'].rank(ascending = False)
    data[['交易额','排名']]
    每个人不同时段的交易额
    dataframe.groupby(by = ['姓名','时段'])['交易额'].sum()
    设置各时段累计
    dataframe.groupby(by = ['姓名'])['时段','交易额'].aggregate({'交易额':np.sum,'时段':lambda x:'各时段累计'})
    对指定列进行聚合,查看最大,最小,和,平均值,中值
    dataframe.groupby(by = '姓名').agg(['max','min','sum','mean','median'])
    查看部分聚合后的结果
    dataframe.groupby(by = '姓名').agg(['max','min','sum','mean','median'])['交易额']
    查看交易额低于 2000 的三条数据
    dataframe[dataframe.交易额 < 2000][:3]
    查看上浮了 50% 之后依旧低于 1500 的交易额,查看 4 条数据
    dataframe.loc[dataframe.交易额 < 1500,'交易额'] = dataframe[dataframe.交易额 < 1500]['交易额'].map(lambda num:num*1.5)
    查看交易额大于 2500 的数据
    dataframe[dataframe.交易额 > 2500]
    查看交易额低于 900 或 高于 1800 的数据
    dataframe[(dataframe.交易额 < 900)|(dataframe.交易额 > 1800)]
    将所有低于 200 的交易额都替换成 200
    dataframe.loc[dataframe.交易额 < 200,'交易额'] = 200
    查看低于 1500 的交易额个数
    dataframe.loc[dataframe.交易额 < 1500,'交易额'].count()
    将大于 3000 元的都替换为 3000 元
    dataframe.loc[dataframe.交易额 > 3000,'交易额'] = 3000
    查看有多少行数据
    len(dataframe)
    丢弃缺失值之后的行数
    len(dataframe.dropna())
    包含缺失值的行
    dataframe[dataframe['交易额'].isnull()]
    使用固定值替换缺失值
    dff = copy.deepcopy(dataframe)
    dff.loc[dff.交易额.isnull(),'交易额'] = 999
    使用交易额的均值替换缺失值
    dff = copy.deepcopy(dataframe)
    for i in dff[dff.交易额.isnull()].index:
        dff.loc[i,'交易额'] = round(dff.loc[dff.姓名 == dff.loc[i,'姓名'],'交易额'].mean())
    使用整体均值的 80% 填充缺失值
    dataframe.fillna({'交易额':round(dataframe['交易额'].mean() * 0.8)},inplace = True)
    查看重复值
    dataframe[dataframe.duplicated()]
    丢弃重复行
    dataframe = dataframe.drop_duplicates()
    查看员工业绩波动情况(每一天和昨天的数据作比较)
    dff = dataframe.groupby(by = '日期').sum()['交易额'].diff()
    对数据使用 map 函数
    dff.map(lambda num:'%.2f'%(num))[:5]
    查看张三的波动情况
    dataframe[dataframe.姓名 == '张三'].groupby(by = '日期').sum()['交易额'].diff()
    修改异常值
    data.loc[data.交易额 > 3000,'交易额'] = 3000
    data.loc[data.交易额 < 200,'交易额'] = 200
    删除重复值
    data.drop_duplicates(inplace = True)
    填充缺失值
    data['交易额'].fillna(data['交易额'].mean(),inplace = True)
    使用交叉表得到每人在各柜台交易额的平均值
    data_group = pd.crosstab(data.姓名,data.柜台,data.交易额,aggfunc = 'mean').apply(round)
    绘制柱状图
    data_group.plot(kind = 'bar')
    使用 concat 连接两个相同结构的 DataFrame 对象
    df3 = pd.concat([df1,df2])
    合并,忽略原来的索引 ignore_index
    df4 = df3.append([df1,df2],ignore_index = True)
    按照列进行拆分
    df5 = df4.loc[:,['姓名','柜台','交易额']]
    按照工号进行合并,随机查看 3 条数据
    rows = np.random.randint(0,len(df5),3)
    pd.merge(df4,df5).iloc[rows,:]
    按照工号进行合并,指定其他同名列的后缀
    pd.merge(df1,df2,on = '工号',suffixes = ['_x','_y']).iloc[:,:]
    两个表都设置工号为索引 set_index
    df2.set_index('工号').join(df3.set_index('工号'),lsuffix = '_x',rsuffix = '_y').iloc[:]
    按照交易额和工号降序排序,查看五条数据
    dataframe.sort_values(by = ['交易额','工号'],ascending = False)[:5]
    按照交易额和工号升序排序,查看五条数据
    dataframe.sort_values(by = ['交易额','工号'])[:5]
    按照交易额降序和工号升序排序,查看五条数据
    dataframe.sort_values(by = ['交易额','工号'],ascending = [False,True])[:5]
    按工号升序排序
    dataframe.sort_values(by = ['工号'])[:5]
    按列名升序排序
    dataframe.sort_index(axis = 1)[:5]
    每隔五天--5D
    pd.date_range(start = '20200101',end = '20200131',freq = '5D')
    每隔一周--W
    pd.date_range(start = '20200301',end = '20200331',freq = 'W')
    间隔两天,五个数据
    pd.date_range(start = '20200301',periods = 5,freq = '2D')
    间隔三小时,八个数据
    pd.date_range(start = '20200301',periods = 8,freq = '3H')
    三点开始,十二个数据,间隔一分钟
    pd.date_range(start = '202003010300',periods = 12,freq = 'T')
    每个月的最后一天
    pd.date_range(start = '20190101',end = '20191231',freq = 'M')
    间隔一年,六个数据,年末最后一天
    pd.date_range(start = '20190101',periods = 6,freq = 'A')
    间隔一年,六个数据,年初最后一天
    pd.date_range(start = '20200101',periods = 6,freq = 'AS')
    使用 Series 对象包含时间序列对象,使用特定索引
    data = pd.Series(index = pd.date_range(start = '20200321',periods = 24,freq = 'H'),data = range(24))
    三分钟重采样,计算均值
    data.resample('3H').mean()
    五分钟重采样,求和
    data.resample('5H').sum()
    计算OHLC open,high,low,close
    data.resample('5H').ohlc()
    将日期替换为第二天
    data.index = data.index + pd.Timedelta('1D')
    查看指定日期的年份是否是闰年
    pd.Timestamp('20200301').is_leap_year
    查看指定日期所在的季度和月份
    day = pd.Timestamp('20200321')
    查看日期的季度
    day.quarter
    查看日期所在的月份
    day.month
    转换为 python 的日期时间对象
    day.to_pydatetime()
    查看所有的交易额信息
    dataframe['交易额'].describe()
    查看四分位数
    dataframe['交易额'].quantile([0,0.25,0.5,0.75,1.0])
    查看最大的交易额数据
    dataframe.nlargest(2,'交易额')
    查看最后一个日期
    dataframe['日期'].max()
    查看最小的工号
    dataframe['工号'].min()
    第一个最小交易额的行下标
    index = dataframe['交易额'].idxmin()
    第一个最小交易额
    dataframe.loc[index,'交易额']
    最大交易额的行下标
    index = dataframe['交易额'].idxmax()
    跳过 1 2 4 行,以第一列姓名为索引
    dataframe2 = pd.read_excel('超市营业额.xlsx',
                               skiprows = [1,2,4],
                               index_col = 1)
    查看 5 到 10 的数据
    dataframe[5:11]
    查看第六行的数据
    dataframe.iloc[5]
    查看第 1 3 4 行的数据
    dataframe.iloc[[0,2,3],:]
    查看第 1 3 4 行的第 1 2 列
    dataframe.iloc[[0,2,3],[0,1]]
    查看前五行指定,姓名、时段和交易额的数据
    dataframe[['姓名','时段','交易额']][:5]
    查看第 2 4 5 行 姓名,交易额 数据 loc 函数
    dataframe.loc[[1,3,4],['姓名','交易额']]
    查看第四行的姓名数据
    dataframe.at[3,'姓名']
    某一时段的交易总和
    dataframe[dataframe['时段'] == '14:00-21:00']['交易额'].sum()
    查看张三总共的交易额
    dataframe[dataframe['姓名'].isin(['张三'])]['交易额'].sum()
    查看日用品的销售总额
    dataframe[dataframe['柜台'] == '日用品']['交易额'].sum()
    查看交易额在 1500~3000 之间的记录
    dataframe[dataframe['交易额'].between(1500,3000)]
    将日期设置为 python 中的日期类型
    data.日期 = pd.to_datetime(data.日期)
    每七天营业的总额
    data.resample('7D',on = '日期').sum()['交易额']
    每七天营业总额
    data.resample('7D',on = '日期',label = 'right').sum()['交易额']
    每七天营业额的平均值
    func = lambda item:round(np.sum(item)/len(item),2)
    data.resample('7D',on = '日期',label = 'right').apply(func)['交易额']
    每七天营业额的平均值
    func = lambda num:round(num,2)
    data.resample('7D',on = '日期',label = 'right').mean().apply(func)['交易额']
    删除工号这一列
    data.drop('工号',axis = 1,inplace = True)
    按照姓名和柜台进行分组汇总
    data = data.groupby(by = ['姓名','柜台']).sum()
    查看张三的汇总数据
    data.loc['张三',:]
    查看张三在蔬菜水果的交易数据
    data.loc['张三','蔬菜水果']
    丢弃工号列
    data.drop('工号',axis = 1,inplace = True)
    按照柜台进行排序
    dff = data.sort_index(level = '柜台',axis = 0)
    按照姓名进行排序
    dff = data.sort_index(level = '姓名',axis = 0)
    按照柜台进行分组求和
    dff = data.groupby(level = '柜台').sum()['交易额']
    平均值
    data.mean()
    标准差
    data.std()
    协方差
    data.cov()
    删除缺失值和重复值,inplace = True 直接丢弃
    data.dropna(inplace = True)
    data.drop_duplicates(inplace = True)
    
    
    
    将 NaN 替换成某一数值
    使用 fillna 
    dataframe.fillna(value = 'xxx',inplace=True)
    
    删除某一个值
    使用 drop 
    dataframe.drop(10,inplace=True)
    复制代码
    复制代码
    交换两行的值
    
        if m != n:
            temp = np.copy(dataframe[m])
            dataframe[m] = dataframe[n]
            dataframe[n] = temp
        else:
            temp = np.copy(dataframe[dataframe.shape[1]-1])
            dataframe[dataframe.shape[1]-1] = dataframe[n]
            dataframe[n] = temp
    复制代码
    删除 columns 这些列
    
        dataframe.drop(columns = list, inplace=True)

    2020-07-03

  • 相关阅读:
    最短路径—Dijkstra算法和Floyd算法
    设计模式之工厂模式(Factory模式)
    接口继承与实现继承
    设计模式之工厂模式
    C++的四种强制转型形式:
    手写atoi、strcpy、strcat
    进程和线程关系及区别
    海量数据处理
    什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁
    kolla-ansible 重新部署 ceph 遇到的问题
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/13228741.html
Copyright © 2020-2023  润新知