关于这学期的总结

Posted hany-postq473111315

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于这学期的总结相关的知识,希望对你有一定的参考价值。

# 例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(rE:资料数据集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

以上是关于关于这学期的总结的主要内容,如果未能解决你的问题,请参考以下文章

学期总结

个人学期总结

本学期c#学习总结

软件工程学期总结

《软件工程课程总结》

作业九:报告及总结