Python复习
1.pandas.DataFrame相关操作
重新指定列名
全部重命名:
1 2 3 4 5 6 7 8 9 10
| data = { '商品名称': ['手机', '电视', '电脑', '耳机', '平板'], '商品编号': ['P001', 'T002', 'C003', 'E004', 'T005'], '单价': [5000, 3000, 4500, 500, 2000], '销量': [10, 10, 6, 30, 8] } df = pd.DataFrame(data) df.columns = ['a','b','c','d']
|
部分重命名:
1 2 3 4
| df.rename( columns = {'old0':'new0'...}, inplace = )
|
对列名进行字符串操作:
1 2 3 4
| df.columns = df.columns.str.strip()
df.columns = df.columns.str.replace('old', 'new')
|
调整列数
1 2 3 4 5 6 7 8 9 10 11
| if __name__ == '__main__': data = { '商品名称': ['手机', '电视', '电脑', '耳机', '平板'], '商品编号': ['P001', 'T002', 'C003', 'E004', 'T005'], '单价': [5000, 3000, 4500, 500, 2000], '销量': [10, 10, 6, 30, 8] } df = pd.DataFrame(data) df = df[['商品名称','单价']]
|
根据某个字段排序df.value_sorted()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| df.sort_values( by='排序依据的字段', ascending=False )->DataFrame
import pandas as pd
if __name__ == '__main__': data = { '商品名称': ['手机', '电视', '电脑', '耳机', '平板'], '商品编号': ['P001', 'T002', 'C003', 'E004', 'T005'], '单价': [5000, 3000, 4500, 500, 2000], '销量': [10, 10, 6, 30, 8] } df = pd.DataFrame(data) print(df) """ 商品名称 商品编号 单价 销量 0 手机 P001 5000 10 1 电视 T002 3000 10 2 电脑 C003 4500 6 3 耳机 E004 500 30 4 平板 T005 2000 8 """ df = df.sort_values( by='单价', ascending=False ) print(df) """ 商品名称 商品编号 单价 销量 0 手机 P001 5000 10 2 电脑 C003 4500 6 1 电视 T002 3000 10 4 平板 T005 2000 8 3 耳机 E004 500 30 """
|
df.pivot()
1 2 3 4 5
| df = df.pivot( index='商品编号', columns='商品名称', values='单价' )
|
原df:

pivot后的df:

replace()
用于对DataFrame的列进行替换
函数用法:
1 2 3 4 5 6 7 8 9 10 11 12
| import pandas as pd data = { 'a':[...] 'b':[...] ... } df = pd.DataFrame(data) df['a'] = df['a'].replace( { } )
|
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import pandas as pd
if __name__ == '__main__': data = { '商品名称': ['手机', '电视', '电脑', '耳机', '平板'], '商品编号': ['P001', 'T002', 'C003', 'E004', 'T005'], '单价': [5000, 3000, 4500, 500, 2000], '销量': [10, 10, 6, 30, 8] } df = pd.DataFrame(data) df['商品名称'] = df['商品名称'].replace( { "手机": "Phone", "电视": "TV", "电脑": "computer", "耳机": "earphone", "平板": "Pad", } )
|


df.iloc[]
基于位置的索引
例子:
1 2 3 4 5 6 7 8
| if __name__ == '__main__': data = { '商品名称': ['手机', '电视', '电脑', '耳机', '平板'], '商品编号': ['P001', 'T002', 'C003', 'E004', 'T005'], '单价': [5000, 3000, 4500, 500, 2000], '销量': [10, 10, 6, 30, 8] } df = pd.DataFrame(data)
|
选择单行:

选择单列:

选择多行

选择多列

同时选择多行多列

切片操作

df.loc[]
基于标签的索引
例子:
1 2 3 4 5 6 7 8
| if __name__ == '__main__': data = { '商品名称': ['手机', '电视', '电脑', '耳机', '平板'], '商品编号': ['P001', 'T002', 'C003', 'E004', 'T005'], '单价': [5000, 3000, 4500, 500, 2000], '销量': [10, 10, 6, 30, 8] } df = pd.DataFrame(data)
|
选择单行:

选择单列:

选择多行多列:
1 2
| df.loc[[1, 2, 3], ['商品名称', '单价']]
|

切片操作:

布尔索引
1 2
| df.loc[df['单价'] > 1000]
|

2.对字典的操作
增加新的键值对
1 2 3 4 5 6
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, }
|
可以直接添加:
也可以使用update方法
也可以使用setdefault方法
get()
从键获取值
获取存在的键的值
1 2 3 4 5 6 7 8
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } d.get('a')
|
获取不存在键的值
1 2 3 4 5 6 7 8
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, }
d.get(__key='d')
|

此时需要指定一个填充值
1 2 3 4 5 6 7 8
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } d.get('d', 'Unknown')
|
遍历字典
只遍历键
1 2 3 4 5 6 7 8 9
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } for x in d: print(x)
|

使用items()获取(k,v)元组
1 2 3 4 5 6 7 8 9
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } for x in d.items(): print(x)
|

1 2 3 4 5 6 7 8 9
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } for k, v in d.items(): print(f"{k}:{v}")
|

字典推导式
1 2 3 4 5 6 7 8
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } d = {k: v for k, v in d.items() if v < 3} print(d)
|

对字典进行排序
使用内置的sorted()函数进行排序
1 2
| sorted(要排序的对象,key=lambda x:...,reverse=)
|
根据键排序
1 2 3 4 5 6 7 8
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } d = {k: d.get(k) for k in sorted(d, reverse=True)}
|
根据值排序
注意:要先用items()转换成列表
排序后要再使用dict()转换回列表
1 2 3 4 5 6 7 8
| if __name__ == '__main__': d = { 'a': 1, 'b': 2, 'c': 3, } d = dict(sorted(d.items(), key=lambda x: x[1], reverse=True)) print(d)
|

3.列表推导式
获取特定元素的索引列表
比如获取奇数元素的索引
1 2 3
| if __name__ == '__main__': arr = [1, 2, 3, 4, 5, 6] odd_idx = [i for i in range(len(arr)) if arr[i] % 2]
|
比如获取每个位置是否是奇数
1 2 3
| if __name__ == '__main__': arr = [1, 2, 3, 4, 5, 6] odd_idx = [arr[i] % 2 for i in range(len(arr))]
|

根据这个布尔数组获取到对应的元素
1
| odd_list = [v for v, i in zip(arr, odd_idx) if i]
|

4.lambda表达式
形式:
5.map方法
1
| map(函数,可迭代对象,...) -> 迭代器
|
比如常见的把输入分割后转成int的列表
1
| int_list = list(map(int,input().split()))
|
或者输入两个整数,直接用map转换成两个int
1
| a,b = map(int,input().split())
|
6.字符串内部按ascii排序
直接使用sorted()函数
1 2 3
| if __name__ == '__main__': str = "sucnsimcsop" str = ''.join(sorted(str))
|

7.字符串拆解成字符列表
直接用list()进行转换
1 2 3
| if __name__ == '__main__': str = "sucnsimcsop" str = list(str)
|

8.python中char和ascii之间的转换
使用ord()函数
9.日期计算
主要使用datetime这个库
主要用这三个工具:
1
| from datetime import datetime, date, timedelta
|
获取当前年-月-日 时间
1 2 3
| now = datetime.now()
print(f"now:{now}")
|
获取当前日期
建立特定年月日的日期对象
1 2 3 4 5 6 7 8 9 10 11 12
| if __name__ == '__main__': year = 1991 month = 1 day = 1 daytime = datetime(year, month, day) print(daytime) day = date(year, month, day) print(day)
|
计算日期差值
需要用到timedelta
只能是date对象跟timedelta对象进行运算
计算直接+或者-
1 2 3 4 5 6 7 8 9 10 11 12
| if __name__ == '__main__': year = 1991 month = 1 day = 1 day = date(year, month, day) print(day) delta = timedelta(days=2) print(day - delta) print(day + delta)
|

获取星期几:
用.weekday()
10.输出格式控制
对齐
使用f-string的形式:
左对齐
1 2
| text = "Hello World!" print(f"{text:<10}")
|
居中
1 2 3 4 5 6 7 8
| text = "Hello World!" print(f"{text:^10}")
text.center( __width=, __fillchar= )
|
右对齐
1 2
| text = "Hello World!" print(f"{text:>10}")
|
填充
可以在上面的基础上设置填充字符
1 2 3 4 5
| if __name__ == '__main__': text = "Hello World!" print(f"{text:*<100}") print(f"{text:=^100}") print(f"{text:->100}")
|

数字格式化
保留几位小数
1 2 3 4
| if __name__ == '__main__': num: float = 1.14514 print(f"{num:.2f}")
|
转换为百分数,并保留小数
1 2 3 4
| if __name__ == '__main__': num: float = 1.14514 print(f"{num:.2%}")
|
转化为16进制
1 2 3 4 5 6
| if __name__ == '__main__': num: int = 114514 print(f"{num:#016x}")
|
转换为2进制
1 2 3 4 5 6
| if __name__ == '__main__': num: int = 114514 print(f"{num:#016b}")
|
11.列表内多字段降升序,list.sort的使用
对元组数组进行排序:
重点是list.sort()方法的使用
key字段可以传入一个多个返回值的lambda表达式,以达到特定的效果,比如当我们预想的某个字段值相等时,可以根据别的字段进行排序
1 2 3 4 5 6 7 8
| if __name__ == '__main__': arr = [ ("Alice", 111), ("Bob", 222), ("Cam", 333), ] arr.sort(key=lambda x: (-x[1], x[0]))
|