前言
在计算机编程中,pandas是用于数据操纵和分析的Python软件库。它建造在NumPy基础上,并为操纵数值表格和时间序列,提供了数据结构和运算操作。(维基百科)
下载依赖
引入依赖
1 2 3
| import numpy as np import pandas as pd import matplotlib.pyplot as plt
|
Pandas维护的数据类型
- Series:数据系列,用于保存和处理一维数据
- 数据系列符合NumPy数据类型标准,可以使用NumPy直接处理
- DataFrame:数据表,用于保存和处理二维数据
- Index:索引,用于索引Series和DataFrame对象
创建Series对象
通过列表创建Series对象
1
| series_object = pd.Series(data=[1, 2, 3])
|
自定义索引
1
| series_object = pd.Series(data=[1, 2, 3], index=["index_1", "index_2", "index_3"])
|
通过字典创建Series对象
1
| series_object = pd.Series(data={"index_1": 1, "index_2": 2, "index_3": 3})
|
Series对象的取值
直接取值
1
| series_object["index_1"]
|
花式索引
1
| series_object[["index_1"]]
|
布尔索引
1
| series_object[series_object > 0]
|
切片
1
| series_object[<index_start>:<index_end>]
|
Series对象的属性
获取索引对象
获取索引的值
1
| series_object.index.values
|
获取索引的值
1
| series_object.index.values
|
获取数据
获取元素个数
获取元素是否唯一
获取是否有空值
获取数据是否是单调递增
1
| series_object.is_monotonic_increasing
|
获取数据是否是单调递减
1
| series_object.is_monotonic_decreasing
|
Series对象的方法
求和
求平均数
求中位数
求众数
求最大值
求最小值
求标准差
求方差
求4分位数
求1/4位数
1
| q1 = series_object.quantile(0.25)
|
求3/4位数
1
| q3 = series_object.quantile(0.75)
|
求四分位距离
求所有描述性统计信息
1
| new_series_object = series_object.describe()
|
删除指定位置的元素
1
| series_object.drop(index=0)
|
1
| series_object.drop(index=[1, 3])
|
对空值的相关操作
依次判断每个元素是否是NaN
依次判断每个元素是否不是NaN
删除NaN
1
| series_object.dropna(inplace=True)
|
1
| new_series_object = series_object.dropna()
|
通过布尔索引删除NaN
1
| series_object[series_object.notnull()]
|
填充NaN
填充为指定值
填充为就近的上一个值
1
| series_object.fillna(method="ffill")
|
填充为就近的下一个值
1
| series_object.fillna(method="bfill")
|
填充就近的上一个值或下一个值
1
| series_object.fillna(method="ffill").fillna(method="bfill")
|
对重复值的相关操作
去重(Series)
遇到重复元素只保留第一项
inplace=True:在原对象上操作
1
| series_object.drop_duplicates(inplace=True)
|
1
| new_series_object = series_object.drop_duplicates()
|
遇到重复元素只保留最后一项
1
| series_object.drop_duplicates(keep="last", inplace=True)
|
1
| new_series_object = series_object.drop_duplicates(keep="last")
|
去除所有相同个数不唯一的元素
1
| series_object.drop_duplicates(keep=False, inplace=True)
|
1
| new_series_object = series_object.drop_duplicates(keep=False)
|
利用重复元素判断来去重
- 将不重复的数据标记为True,并通过布尔索引摘取所有标记为True的元素
1
| new_series_object = [~series_object.drop_duplicated()]
|
去重(ndarray)
1
| ndarray_object = series_object.unique()
|
获取不重复元素的个数
依次获取每种元素重复频率
1
| series_object.value_counts()
|
依次判断每个元素是否重复
1
| series_object.duplicated()
|
排序相关的操作
给索引排序
升序
1
| series_object.sort_index()
|
1
| series_object.sort_index(ascending=True)
|
降序
1
| series_object.sort_index(ascending=False)
|
给值排序
升序
1
| series_object.sort_values()
|
1
| series_object.sort_values(ascending=True)
|
降序
1
| series_object.sort_values(ascending=False)
|
求最大的几个值
1
| series_object.nlargest(<num>)
|
求最小的几个值
1
| series_object.nsmallest(<num>)
|
格式化数据为指定字符串
1
| series_object.map("{:.2f}".format(x))
|
自动排除NaN
1
| series_object.map("{:.2f}".format(x), na_action="ignore")
|
替换指定值
1
| series_object.replace({"替换前的值": "替换后的值", "替换前的值": "替换后的值"})
|
执行回调函数
1 2 3 4
| def func(x): return x ** 0.5 * 10
new_series_object = series_object.map(func)
|
使用lambda函数作为回调函数
1
| new_series_object = series_object.map(lambda x: x ** 0.5 * 10)
|
1
| new_series_object = series_object.apply(lambda x: x ** 0.5 * 10)
|
分组聚合
level=0:定义分组的维度
分组求和
1
| new_series_object = series_object.groupby(level=0).sum()
|
Series对象利用封装的Matplotlib绘制图表
修改Matplotlib的字体和解决中文显示的问题
1 2 3
| sns.set_theme() plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams["axes.unicode_minus"] = False
|
修改图表分辨率
<width>:宽,单位英寸
<height>:高,单位英寸
1
| series_object.plot(kind="bar", figsize(<width>, <height>))
|
输出为矢量图
1
| %config InlineBackground.figure_format = "svg"
|
1
| series_object.plot(kind="bar")
|
绘制折线图
1
| data_frame.plot(kind="line")
|
绘制柱状图
color=['red', '#000000']:定义颜色
y="<column_name>":根据指定单列数据绘制图表
y=["<column_name_1>", "<column_name_2>"]:根据指定多列数据绘制图表
1
| series_object.plot(kind="bar")
|
绘制饼图
autopct="%.2f%%":自动显示百分比
shadow=True:添加阴影
pctdistance=1.3:百分比距离圆心的位置
wedgeprops={"width": 0.3}:形状改为环状饼图
"width": 0.3:定义环的宽度
edgecolor="white":定义分割线颜色
1
| series_object.plot(kind="pie")
|
创建DataFrame对象
通过构造器创建
index=[1, 2, 3]:定义行名
columns=["A", "B", "C"]:定义列名
二维列表
1 2 3
| arr = [[], [], []]
data_frame_object = pd.DataFrame(arr)
|
二维数组
1 2 3 4
| arr = [[], [], []]
ndarray_object = np.array(arr) data_frame_object = pd.DataFrame(ndarray_object)
|
字典
1 2 3 4 5 6 7
| dict_object = { "1": [1, 2, 3], "2": [1, 2, 3], "3": [1, 2, 3], }
data_frame_object = pd.DataFrame(dict_object)
|
读取CSV文件
index_col="<column_name>":将指定列作为索引列
usecols=["<column_name_1>", "<column_name_2>"]:只获取指定列
nrows=<num>:只获取前几行的数据
skiprows=<num>:跳过前几行数据
delimiter=","、sep=",":指定CSV文件的分隔符
quotechar="\"":指定包裹数据的字符,在获取数据后会自动去除
encoding="utf-8":指定文件编码格式
1
| data_frame_object = pd.read_csv("<file>")
|
使用迭代器读取数据
iterator=True:使用迭代器读取数据
chunksize=<num>:指定迭代器每次读取的数据数
1 2
| data_frame_iterator = pd.read_csv("<file>", iterator=True, chunksize=<num>) iterator = next(data_frame_iterator)
|
读取Excel文件
读取xls文件需要下载依赖
读取xlsx文件需要下载依赖
读取Excel文件
index_col=0:指定索引列,如果不指定则会额外生成一组有序数列作为索引列
sheet_name="<sheet_name>":指定读取的工作簿名称
header=0:指定表头的索引
nrows=<num>:只获取前几行的数据
skiprows=<num>:跳过前几行数据
na_values=None:指定被视为空值的值
1
| data_frame_object = pd.read_excel("<file>")
|
读取数据库
下载依赖
1
| pip3 install mysqlclient
|
- MySQL 8.x 需要安装cryptography库
1
| pip3 install cryptography
|
建立连接
pymysql方式建立连接
1
| conn = pymysql.connect(host="127.0.0.1", port=3306, user="<username>", password="<password>", database="<database_name>", charset="utf8mb4")
|
sqlalchemy方式建立连接
pymysql
1
| conn = create_engine("mysql+pymysql://<username>:<password>@127.0.0.1:3306/<database_name>?charset=utf8mb4")
|
mysqlclient
1
| conn = create_engine("mysql://<username>:<password>@127.0.0.1:3306/<database_name>?charset=utf8mb4")
|
读取数据库数据
index_col="<column_name>":将指定列作为索引列
1
| data_frame_object = pd.read_sql("SELECT * FROM <table_name>", conn)
|
通过DataFrame对象对数据表的读写
获取前几行的数据
1
| data_frame_object.head(<num>)
|
获取后几行的数据
1
| data_frame_object.tail(<num>)
|
获取指定列
取一个列
1
| new_series_object = data_frame_object["<column_name>"]
|
取多个列
1
| new_data_frame_object = data_frame_object[["<column_name_1>", "<column_name_2>"]]
|
取指定行
取一个行
1
| data_frame_object.loc[<column_name>]
|
取多个行
1
| data_frame_object.loc[[<column_name>, <column_name>]]
|
取连续的多行
根据列名
1
| data_frame_object.loc[[<column_name>:<column_name>]]
|
根据筛选
1
| data_frame_object.iloc[<index_start>:<index_end>]
|
取单元格
1
| data_frame_object.at[<row_name>, <column_name>]
|
1
| data_frame_object.iat[<row_index>, <row_index>]
|
修改单元格的值
1
| data_frame_object.at[<row_name>, <column_name>] = <value>
|
1
| data_frame_object.iat[<row_index>, <row_index>] = <value>
|
末尾追加新列
新列赋值为相同值
1
| data_frame_object["<new_column_name>"] = <new_value>
|
新列赋值为不同值
1
| data_frame_object["<new_column_name>"] = [<new_value_1>, <new_value_2>]
|
末尾追加新行
为每一个是列都赋值
1
| data_frame_object[<index_max>+1] = [<value_1>, <value_2>]
|
只为指定列赋值
1
| data_frame_object[<index_max>+1] = {"<column_name>": <value>}
|
DataFrame对象的方法
获取数据表相关信息
1
| data_frame_object.info()
|
合并表
merge
如果外联表字段名相同
how="<type>":连接方式
inner:内连接,交集
outer:外连接,并集
left:左外连接
right:右外连接
on="<field_name>":连接字段
suffixes=("_x", "_y"):定义如果出现重复的列的字段后缀
1 2 3 4
| data_frame_object_1 = data_frame_object = pd.DataFrame([[], [], []]) data_frame_object_2 = data_frame_object = pd.DataFrame([[], [], []])
data_frame_object_1.merge(data_frame_object_2, how="<type>", on="<field_name>")
|
如果外联表字段名不相同
left_on="<field_name>":定义左表连接字段
right_on="<field_name>":定义右表连接字段
1 2 3 4
| data_frame_object_1 = data_frame_object = pd.DataFrame([[], [], []]) data_frame_object_2 = data_frame_object = pd.DataFrame([[], [], []])
data_frame_object_1.merge(data_frame_object_2, how="<type>", left_on="<field_name>", right_on="<field_name>")
|
直接根据外联表索引列作为关联
1 2 3 4
| data_frame_object_1 = data_frame_object = pd.DataFrame([[], [], []]) data_frame_object_2 = data_frame_object = pd.DataFrame([[], [], []])
data_frame_object_1.merge(data_frame_object_2, how="<type>", left_on="<field_name>", right_index=True)
|
concat
ignore_index=True:忽略索引列的拼接,让索引延续
1 2 3 4
| data_frame_object_1 = data_frame_object = pd.DataFrame([[], [], []]) data_frame_object_2 = data_frame_object = pd.DataFrame([[], [], []])
pd.concat([data_frame_object_1, data_frame_object_2], axis=0, join="outer", ignore_index=True)
|
join
- 只拼接列
- 必须指定左表后缀或者右表后缀,也可以都指定,但是不能不指定
1 2 3 4
| data_frame_object_1 = data_frame_object = pd.DataFrame([[], [], []]) data_frame_object_2 = data_frame_object = pd.DataFrame([[], [], []])
data_frame_object_1.join(data_frame_object_2, lsuffix='_left', rsuffix='_ritht')
|
append
ignore_index=True:忽略索引列的拼接,让索引延续
1 2 3 4
| data_frame_object_1 = data_frame_object = pd.DataFrame([[], [], []]) data_frame_object_2 = data_frame_object = pd.DataFrame([[], [], []])
data_frame_object_1.append(data_frame_object_2, ignore_index=True)
|
修改列名
1
| data_frame_object.rename(columns={"<old_column_name>": "<new_column_name>"}, inplace=True)
|
1
| new_data_frame_object = data_frame_object.rename(columns={"<old_column_name>": "<new_column_name>"})
|
删除指定列
1
| data_frame_object.drop(columns=["<column_name>"], inplace=True)
|
1
| new_data_frame_object = data_frame_object.drop(columns=["<column_name>"])
|
定义索引列
1
| new_data_frame_object = data_frame_object.set_index("<column_name>")
|
对空值的相关操作
判断空值
1
| data_frame_object.isnull()
|
1
| data_frame_object.notnull()
|
删除包含空值的行
1
| data_frame_object.dropna()
|
删除包含空值的列
axis=1:指定维度
1
| data_frame_object.dropna(axis=1)
|
填充整个表的所有空值
1
| data_frame_object.fillna("<value>")
|
填充指定列的空值
1
| data_frame_object["<column_name>"].fillna("<value>")
|
写入到数据表
1
| data_frame_object["<column_name>"] = data_frame_object["<column_name>"].fillna("<value>")
|
对重复值的相关操作
根据指定列判断是否是重复的行
根据单个列判断
1
| data_frame_object.duplicated("<column_name>")
|
根据多个列组合判断
1
| data_frame_object.duplicated(["<column_name_1>", "<column_name_2>"])
|
去除被视为重复的行
不保留
1
| data_frame_object.drop_duplicates("<column_name>", keep=False)
|
保留首行
1
| data_frame_object.drop_duplicates("<column_name>")
|
1
| data_frame_object.drop_duplicates("<column_name>", keep="first")
|
保留尾行
1
| data_frame_object.drop_duplicates("<column_name>", keep="last")
|
替换
替换单个数据
1
| new_data_frame_object = data_frame_object.replace("<old_value>", "<new_value>")
|
替换多个数据
1
| new_data_frame_object = data_frame_object.replace(["<old_value_1>", "<old_value_2>"], ["<new_value_1>", "<new_value_2>"])
|
通过正则表达式替换
1
| new_data_frame_object = data_frame_object.replace(r"<regex_pattern>", "<new_value>", regex=True)
|
对日期类型的相关操作
将字符串类型数据转换为日期类型
1
| data_frame_object["<column_name>"] = pd.to_datetime(data_frame_object["<column_name>"])
|
获取日期的属性
1
| data_frame_object["<column_name>"].dt.<attribute>
|
对字符串的相关操作
1
| data_frame_object["<column_name>"].str.<attribute>
|
抽取
利用正则表达式作为抽取内容
1
| data_frame_object["<column_name>"].str.extract(r"<regex_pattern>")
|
拆分
利用正则表达式作为分割符
expand=True:是否展开为多个列
True:展开为多个列,将数据拆分为每个列的数据
False:不展开,返回一个Series对象,每个数据是一个列表,将数据拆分为列表中的每个数据
1
| data_frame_object["<column_name>"].str.split(r"<regex_pattern>", regex=True, expand=True)
|
筛选
利用Python语法进行筛选
1
| data_frame_object.query("'<str>' in <column_name>")
|
1
| data_frame_object.query("<column_name> == '<str_1>' or <column_name> == '<str_2>'")
|
利用布尔索引进行筛选
1
| data_frame_object[data_frame_object.str.contains("<str_1>") | data_frame_object.str.contains("<str_2>")]
|
在每一个元素上执行回调函数
1 2 3 4
| def func: pass
data_frame_object["<column_name>"].applymap(func)
|
转换每一个字符串元素为整型
1
| data_frame_object["<column_name>"].applymap(int)
|
转换每一个字符串元素为浮点型
1
| data_frame_object["<column_name>"].applymap(float)
|
调整列顺序
利用reindex函数调整列顺序
1
| new_data_frame_object = data_frame_object.reindex(columns=["<column_name_1>", "<column_name_2>"])
|
利用reindex函数调整行顺序
1
| new_data_frame_object = data_frame_object.reindex(index=["<index_name_1>", "<index_name_2>"])
|
利用花式索引调整列顺序
1
| data_frame_object[["<column_name_1>", "<column_name_2>"]]
|
切割数据(分箱)
根据数值范围切割数据
right=True:定义区间
True:缺省值,左开右闭
False:左闭右开
1
| pd.cut(data_frame_object["<column_name>"], bins=[0, 50, 100])
|
为每一段定义标签
1
| pd.cut(data_frame_object["<column_name>"], bins=[0, 50, 100], labels=["low", "high"])
|
根据次数平均分割
1
| pd.qcut(data_frame_object["<column_name>"], 2)
|
根据比例切割
1
| pd.qcut(data_frame_object["<column_name>"], bins=[0, 0.5, 1])
|
将名义变量列转换为虚拟变量矩阵
1
| pd.get_dummies(data_frame_object["<column_name>"])
|
将定序变量列转换为值
1 2 3 4 5
| def convert(arg): results = {"key_1": 1, "key_2": 2, "key_3": 3} return results.get(arg, 0)
data_frame_object["<column_name>"].apply(convert)
|
排序
- 如果需要取最大的前几行数据或最小的前几行数据,可以使用
nlargest和nsmallest函数,而不要先排序再取值,避免性能开销
根据单列排序
ascending=True:顺序
True:缺省值,升序
False:降序
1
| data_frame_object.sort_values(by="<column_name>", ascending=True)
|
根据多列排序
1
| data_frame_object.sort_values(by=["<column_name_1>", "<column_name_2>"], ascending=[True, False])
|
获取最大的前几行的数据
1
| data_frame_object.nlargest(<num>, "<column_name>")
|
获取最小的前几行的数据
1
| data_frame_object.nsmallest(<num>, "<column_name>")
|
分组聚合
先分组再求和
- 根据
<column_name_1>分组,根据<column_name_2>求和
1
| new_data_frame_object = data_frame_object.groupby("<column_name_1>")["<column_name_2>"].sum()
|
仍然返回DataFrame
1
| new_data_frame_object = data_frame_object.groupby("<column_name_1>")[["<column_name_2>"]].sum()
|
根据多个列分组
- 先根据
<column_name_1>分组,再根据<column_name_2>分组,最后根据<column_name_3>求和
- 返回具有多级索引的DataFrame对象
1
| new_data_frame_object = data_frame_object.groupby(["<column_name_1>", "<column_name_2>"])[["<column_name_3>"]].sum()
|
根据指定级索引进行分组
1
| new_data_frame_object = data_frame_object.groupby(level=<level_num>)["<column_name>"].sum()
|
分组后求多个聚合
1
| new_data_frame_object = data_frame_object.groupby("<column_name_1>")["<column_name_2>"].agg(["sum", "max", "min", "count"])
|
1
| new_data_frame_object = data_frame_object.groupby("<column_name_1>")["<column_name_2>"].agg([np.sum, np.amax, np.amin])
|
得到指定组
1
| new_data_frame_object = data_frame_object.groupby("<column_name_1>").get_group("<index_name>")
|
透视
旋转行为列作为透视表
index="<column_name_1>":将指定列作为新表的索引
columns="<column_name_2>":将指定列作为新表的列
values="<column_name_3>":将指定列作为新表的值
1
| new_data_frame_object = data_frame_object.pivot(index="<column_name_1>", columns="<column_name_2>", values="<column_name_3>")
|
直接生成透视表
aggfunc="avg"、aggfunc=np.avg:指定单个聚合函数
np.avg:缺省值,求平均数
np.sum:求和
np.max:求最大值
np.min:求最小值
aggfunc=["avg", "sum"]、aggfunc=[np.avg, np.sum]:指定多个聚合函数
fill_value=0:填充NaN值为0
margins=True:添加汇总列
margins_name="<column_name>":指定汇总列名
1
| new_data_frame_object = data_frame_object.pivot_table(index="<column_name_1>", columns="<column_name_2>", values="<column_name_3>")
|
1
| new_data_frame_object = pd.pivot_table(data_frame_object, index="<column_name_1>", columns="<column_name_2>", values="<column_name_3>")
|
堆叠和反堆叠
反堆叠
- 将具有多级索引的DataFrame转换为只有一级索引的DataFrame
1
| new_data_frame_object = data_frame_object.unstack()
|
将指定级索引作为列
1
| new_data_frame_object = data_frame_object.unstack(level=<level_num>)
|
堆叠
1
| new_data_frame_object = data_frame_object.reset_index()
|
重新指定索引顺序
1
| new_data_frame_object = data_frame_object.reorder_levels(["<column_name_1>", "<column_name_2>"])
|
交换索引级别
1
| new_data_frame_object = data_frame_object.swaplevel(<level_num_1>, <level_num_2>)
|
随机抽样
指定抽样个数
1
| new_data_frame_object = data_frame_object.sample(n=<num>)
|
指定抽样比例
1
| new_data_frame_object = data_frame_object.sample(frac=0.5)
|
按照时间抽样
method="ffill":填充空值
每周抽样一天
1
| new_data_frame_object = data_frame_object.asfreq("W")
|
每月抽样一天
1
| new_data_frame_object = data_frame_object.asfreq("M")
|
每隔10天取一次样本
1
| new_data_frame_object = data_frame_object.asfreq("10D")
|
将10天的数据作为一个组
1
| new_data_frame_object = data_frame_object.resample("10D").sum()
|
插值
线性插值
1
| new_data_frame_object = data_frame_object.interpolate()
|
1
| new_data_frame_object = data_frame_object.interpolate(method="linear")
|
多项式插值
1
| new_data_frame_object = data_frame_object.interpolate(method="polynomial", order=2)
|
就近填充
1
| new_data_frame_object = data_frame_object.interpolate(method="pad")
|
复合值展开
炸开单个列
1
| new_data_frame_object = data_frame_object.explode("<column_name>")
|
炸开多个列
- 多个列的复合值内的元素个数需要匹配,才可以同时炸开多个列
1
| new_data_frame_object = data_frame_object.explode(["<column_name_1>", "<column_name_2>"])
|
环比
手动计算环比
1
| data_frame_object["<column_name_2>"] = data_frame_object["<column_name_1>"].shift(1)
|
1
| (data_frame_object["<column_name_2>"] - data_frame_object["<column_name_1>"]) / data_frame_object["<column_name_1>"] * 100
|
直接计算环比
1
| data_frame_object["<column_name_2>"] = data_frame_object["<column_name_1>"].pct_change()
|
格式化数据
1
| data_frame_object["<column_name_2>"] = data_frame_object["<column_name_2>"].pct_change().applymap(lambda x: "0" if np.isnan(x) else f"{x * 100:.2f}%")
|
窗口计算
1
| data_frame_object["<column_name>"] = data_frame_object["<column_name>"].rolling(<num>).mean()
|
协方差和相关系数
获取协方差
获取相关系数
如果相关系数是大于零,说明两个数是正相关;如果相关系数是小于零,说明两个数是负相关;如果相关系数是等于零或接近零,说明两个数没有相关
如果相关系数的绝对值在[0.6,1],说明两个数是强相关;如果相关系数的绝对值在[0.1,0.6),说明两个数是弱相关;如果相关系数的绝对值在[0,0.1),说明两个数没有相关
皮尔逊相关系数
计算所有数据的相关系数矩阵
1
| data_frame_object.corr()
|
1
| data_frame_object.corr("pearson")
|
计算指定两列的相关系数
1
| np.corrcoef(data_frame_object["<column_name_1>"], data_frame_object["<column_name_2>"])
|
斯皮尔曼相关系数
1
| data_frame_object.corr("spearman")
|
修改背景色
设置为渐变色
Reds:从白色到红色的渐变色
ReYlBu:从红色到黄色到蓝色的渐变色
1
| data_frame_object.style.background_gradient("Reds")
|
保存为Excel文件
1
| data_frame_object.to_excel("<file_name>.xlsx")
|
Index索引类型
多级索引
创建多级索引MultiIndex
1
| multi_index_object = pd.MultiIndex.from_product(([1, 2], [3, 4]), names=["<column_name_1>", "<column_name_2>"])
|
日期索引
创建日期索引DatetimeIndex
手动分段
periods=12:分段数
1
| datetime_index_object = pd.date_range("2020-01-01", "2020-12-01", periods=12)
|
以周分段
1
| datetime_index_object = pd.date_range("2020-01-01", "2020-12-01", freq="W")
|
偏移量
1
| datetime_index_object = pd.date_range("2020-01-01", "2020-12-01", freq="W") + pd.DateOffset(days=1)
|
设置日期的时区
1
| datetime_index_object = datetime_index_object.tz_localize("Asia/Shanghai")
|
转换日期的时区
1
| datetime_index_object = datetime_index_object.tz_convert("Asia/Shanghai")
|
完成
参考文献
哔哩哔哩——千锋教育
哔哩哔哩——骆昊jackfrued
CSDN——一个甜甜的大橙子
CSDN——weixin_46115371
CSDN——夏日麦香