return和yield的异同
- 共同点:return和yield都用来返回值;在一次性地返回所有值场景中return和yield的作用是一样的。
- 不同点:如果要返回的数据是通过for等循环生成的迭代器类型数据(如列表、元组),return只能在循环外部一次性地返回,yeild则可以在循环内部逐个元素返回。下边我们举例说明这个不同点。
def gen_iterator_for_return():
arr = []
for i in range(5):
print("gen_iterator_for_return -> %s" % i)
arr.append(i)
return arr
if __name__ == '__main__':
for line in gen_iterator_for_return():
print(line)
输出:
gen_iterator_for_return -> 0
gen_iterator_for_return -> 1
gen_iterator_for_return -> 2
gen_iterator_for_return -> 3
gen_iterator_for_return -> 4
0
1
2
3
4
return 是将整个集合返回
def gen_iterator_for_yield():
for i in range(5):
print("gen_iterator_for_yield -> %s" % i)
yield i
if __name__ == '__main__':
for line in gen_iterator_for_yield():
print(line)
输出:
gen_iterator_for_yield -> 0
0
gen_iterator_for_yield -> 1
1
gen_iterator_for_yield -> 2
2
gen_iterator_for_yield -> 3
3
gen_iterator_for_yield -> 4
4
yield方式可以看到上下层函数是交替进行的,即上层函数请求迭代一个值下层函数才生成一个值并立即返回这个值
time和datetime
import time
from datetime import datetime, timedelta, timezone, date
# Time时间,主要处理当前CPU的时间信息
print(time.time())
# 时间元组格式的时间
print(time.localtime())
# 时间戳转时间元组
print(time.localtime(1639843200))
# 格式化时间元组
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 将格式字符串转换为时间戳
print(time.mktime(time.strptime("2021-12-19 00:00:00", "%Y-%m-%d %H:%M:%S")))
# 推迟调用线程的运行,secs指秒数
time.sleep(1)
# datetime中的date和time是分开的
print(datetime.now().date())
print(datetime.now().time())
# 时间戳转datetime
print(datetime.fromtimestamp(time.time()))
# 时间计算
print(datetime.now().date() - timedelta(days=1))
print(datetime.now() - timedelta(days=1))
# 时间格式化
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
# 构建时间对象
print(datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat())
# 字符串转时间
print(datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M"))
# 日期计算
print(date.today())
print(date(date.today().year, 1, 1))
today = datetime.today()
print(today.replace(month=2, day=2))
输出:
1639905427.6905348
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=19, tm_hour=17, tm_min=17, tm_sec=7, tm_wday=6, tm_yday=353, tm_isdst=0)
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=353, tm_isdst=0)
2021-12-19 17:17:07
1639843200.0
2021-12-19
17:17:08.699717
2021-12-19 17:17:08.699744
2021-12-18
2021-12-18 17:17:08.699795
2021-12-19 17:17:08
2019-05-18T15:17:00+00:00
2006-11-21 16:30:00
2021-12-19
2021-01-01
2021-02-02 17:17:08.701124
Process finished with exit code 0
Numpy的基本用法
Numpy 是一个开源的 Python 科学计算库,它是 python 科学计算库的基础库,许多其他著名的科学计算库如Pandas,Scikit-learn 等都要用到 Numpy 库的一些功能,Numpy的内部数据结构ndarray,二维表结构,类似于列式存储,每一列存储在数据中,数据类型相同,能快速确定存储数据所需空间的大小,查询也会比较快。
1. 数据类型
Numpy数据类型2. 基本用法
import numpy as np
# 一维数组 2
# 基 于list
arr1 = np.array([1, 2, 3, 4])
print(arr1)
# 基 于tuple
arr2 = np.array((1, 2, 3, 4))
print(arr2)
# 二 维 数 组 (2*3)
arr3 = np.array([[1, 2, 4], [3, 4, 5]])
print(arr3)
# 一维数组
arr4 = np.arange(5)
print(arr4)
# 二维数组
arr5 = np.array([np.arange(3), np.arange(3)])
print(arr5)
num1 = np.int8(12.334)
print(num1)
arr6 = np.arange(4, dtype=float)
print(arr6)
arr7 = np.array([1.22, 3.45, 6.779], dtype='int8')
print(arr7)
# ndim属性,数组维度的数量
print(arr5.ndim)
# shape属性,数组对象的尺度,对于矩阵,即n行m列,shape是一个元组(tuple)
print(arr5.shape)
# size属性用来保存元素的数量,相当于shape中nXm的值
print(arr5.size)
# 数组转置
arr8 = np.arange(24).reshape(4, 6)
print(arr8)
arr8.resize(6, 4)
print(arr8)
# ravel()和flatten(),将多维数组转换成一维数组
# 两者的区别在于返回拷贝(copy)还是返回视图(view),flatten() 返回一份拷贝,需要分配新的内存空间,对 拷贝所做的修改不会影响原始矩阵,而 ravel() 返回的是视图(view),会影响原始矩阵
print(arr8.ravel())
print(arr8.flatten())
# 堆叠数组
arr3_2 = arr3 * 2
print(arr3_2)
# 水平叠加
print(np.hstack((arr3, arr3_2)))
# 垂直叠加
print(np.vstack((arr3, arr3_2)))
# 统计函数
# 求和
print(np.sum(arr3))
# 最大值
print(np.max(arr3))
# 最小值
print(np.min(arr3))
# 最大值减去最小值
print(np.ptp(arr3))
Pandas日期数据处理
Pandas 有着强大的日期数据处理功能,包括如何按日期筛选、显示及统计数据,其基本数据结构为DataFrame
import pandas as pd
# 从csv文件中读取数据
df = pd.read_csv('date.csv', header=None)
print(df.head(2))
# 整理数据
df.columns = ['date', 'number']
df['date'] = pd.to_datetime(df['date']) # 将 数 据
df = df.set_index('date') # 将 date 设 置 为 index
print(df.head(2))
print(df.tail(2))
print(df.shape)
# 查看 Dataframe 的数据类型
print(type(df))
print(df.index)
print(type(df.index))
# 构造 Series 类型数据
s = pd.Series(df['number'], index=df.index)
print(type(s))
print(s.head(2))
# 按年度获取数据
print('--------- 获 取 2020 年 的 数 据 -----------')
print(df['2021':].head(2)) # 获 取 2020 年 的 数 据
print(df['2020':].tail(2)) # 获 取 2020 年 的 数 据
# 获 取 2020 至 2021 年 的 数 据 # 获 取 2016 至 2017 年 的 数 据
print('--------- 获 取 2020 至 2021 年的 数 据 -----------')
print(df['2020':'2021'].head(2))
print(df['2020':'2021'].tail(2))
# 获取某月的数据
print('--------- 获 取 某 月 的 数 据 -----------')
print(df['2020-02':'2020-02']) # 获 取 某 月 的 数 据
# 按周统计数据
print(df.resample('w').sum().head())
# 按月统计数据
print(df.resample('M').sum().head())
# 按季度统计数据
print(df.resample('Q').sum().head())
# 按年统计数据
print(df.resample('AS').sum())
结
常用的数据处理模块就这些了,后续会陆续更新!
网友评论