Python基础知识(二)

2021-12-18  本文已影响0人  Coder小咚

return和yield的异同

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())

常用的数据处理模块就这些了,后续会陆续更新!

上一篇下一篇

猜你喜欢

热点阅读