一.介绍
1.功能:
Pandas是1个强大的分析结构化数据的工具集,旨在简单/直观地处理关系型/标记型数据,主要用于数据挖掘/分析,也
提供数据清洗功能.其基于NumPy开发,可与其它第3方科学计算支持库完美集成,适用于处理以下类型的数据:
①与SQL或Excel表格类似的,含异构列的表格数据
②有序/无序(非固定频率)的时间序列数据
③带行列标签的矩阵数据,包括同构/异构型数据
④任意其它形式的观测/统计数据集,数据转入Pandas数据结构时不必事先标记
Pandas的速度相对较快,很多底层算法都用Cython优化过;不过,为了保持通用性,Pandas仍牺牲了一些性能.另外,
Pandas还是statsmodels的依赖项,因此,Pandas也是Python的统计计算生态系统的重要组成部分
2.安装:
pip install pandas
3.导入:
#通常使用pd作为别名:
import pandas as pd
4.查看版本:
>>> import pandas as pd
>>> pd.__version__
'1.1.2'
二.IO
1.CSV文件
(1)导入:
[<df>=]pd.read_csv(
<filepath_or_buffer>[,cache_dates=True,chunksize=None,comment=None,compression="infer",converters=None,
date_parser=None,dayfirst=False,decimal= ".",delimiter=None,delim_whitespace=False,dialect=None,
doublequote=True,dtype=None,encoding=None,engine=None,error_bad_lines=True,escapechar=None,
false_values=None,header="infer",float_precision=None,index_col=None,infer_datetime_format=False,
iterator=False,keep_date_col=False,keep_default_na=True,lineterminator=None,
low_memory=_c_parser_defaults["low_memory"],mangle_dupe_cols=True,memory_map=False,names=None,
na_filter=True,na_values=None,nrows=None,parse_dates=False,prefix=None,sep=",",quotechar='"',
quoting=csv.QUOTE_MINIMAL,skipfooter=0,skipinitialspace=False,skiprows=None,skip_blank_lines=True,
squeeze=False,thousands=None,true_values=None,usecols=None,verbose=False,warn_bad_lines=True]
)
#参数说明:
filepath_or_buffer:指定要读取的文件;为str/path object/file-like object
chunksize:指定文件块的大小(行数;用于迭代读取);为int
comment:指定如何分割行结尾处注释;为str
#注释会被忽略,不会被载入
date_parse:指定用于解析日期的函数;为function
delimiter:指定不同列之间的分隔符;为str(支持正则表达式)
#如果指定了delimiter,则sep失效
encoding:指定编码方式;为str,默认为None
#导入中文数据时,通常为"utf-8"
header:指定用于指定列名的行的索引;为int/int list/"infer"(手动传入,否则取要读取的首行)
index_col:指定用于指定行标签索引的列;为int/str/int sequence/str sequence/False
keep_date_col:是否保留参与连接成日期的列;为bool
names:指定列名;为array-like,默认为文件中的列名
na_values:指定用于替换NaN的值;为scalar/str/list-like/dict
nrows:指定要读取的行数;为int,默认读到结尾
parse_date:指定要尝试解析为日期的列;为bool(所有列/均不)/int sequence/str sequence/sequence sequence(将某些列组合起来解析)/dict
sep:指定不同列之间的分隔符;为str(支持正则表达式)
#若sep为None,则C引擎无法检测分隔符,但Python引擎可以检测,这意味着将使用后者并通过Python的内置嗅探器csves.niffer检测分隔符
#长度>1的分隔符将被解释为正则表达式,并强制使用Python解析引擎
skiprows:指定要忽略的行;为list-like(要忽略的行的索引)/int(要忽略前几行)/callable(传入索引,忽略则返回True,否则返回False)
thousands:指定数字的千位分隔符;为str
df:返回DataFrame object
#实例:
>>> pd.read_csv("E:\\1.csv",encoding="gbk",sep=",")
姓名 年龄
0 张三 18
1 李四 19
2 王五 20
>>> pd.read_csv("E:\\1.csv",encoding="gbk",sep=",",names=["a","b"])
a b
0 姓名 年龄
1 张三 18
2 李四 19
3 王五 20
(2)导出:
<S_or_df>.to_csv(
[chunksize=None,columns=None,compression="infer",date_format=None,decimal=".",doublequote=True,
encoding=None,errors="strict",escapechar=None,float_format=None,header=True,index=True,index_label=None,
line_terminator=None,mode="w",na_rep="",path_or_buf=None,sep=",",quotechar='"',quoting=None]
)
#参数说明:
S_or_df:指定要导出的数据;为Series object/DataFrame object
header:指定列名;为bool(为True表示使用<S_or_df>的列名)/list/str
index:是否导出行名;为bool
path_or_buf:指定导出到的文件;为str/file handle
#实例:
>>> df=pd.DataFrame([[1,2],[3,4]])
>>> df.to_csv("E:\\1.csv")
>>> pd.read_csv("E:\\1.csv")
Unnamed: 0 0 1
0 0 1 2
1 1 3 4
2.导入文本文件:
[<df>=]pd.read_table(
<filepath_or_buffer>[,cache_dates=True,chunksize=None,comment=None,compression="infer",converters=None,
date_parser=None,dayfirst=False,decimal= ".",delimiter=None,delim_whitespace=False,dialect=None,
doublequote=True,dtype=None,encoding=None,engine=None,error_bad_lines=True,escapechar=None,
false_values=None,float_precision=None,header="infer",index_col=None,infer_datetime_format=False,
iterator=False,keep_date_col=False,keep_default_na=True,lineterminator=None,
low_memory=_c_parser_defaults["low_memory"],mangle_dupe_cols=True,memory_map=False,names=None,nrows=None,
na_filter=True,na_values=None,parse_dates=False,prefix=None,quotechar='"',quoting=csv.QUOTE_MINIMAL,
sep="\t",skipfooter=0,skipinitialspace=False,skiprows=None,skip_blank_lines=True,squeeze=False,
thousands=None,true_values=None,usecols=None,verbose=False,warn_bad_lines=True]
)
#参数说明:其他参数同上
names:指定读取到的数据的列名;为array-like,默认为文件的首行
#指定的列名数量不足时,会作为较右侧的列的列名,多余的列没有列名(见下例2)
sep:指定不同列之间的分隔符;为str,默认为"\t"(水平制表符)
#实例:
>>> pd.read_table("E:\\1.txt")
aaa bbb ccc
0 asd sklasklaksdl mddm,
1 NaN \t dkd
>>> pd.read_table("E:\\1.txt",names=["qwe","rty"])
qwe rty
aaa bbb ccc
asd sklasklaksdl mddm,
NaN \t dkd
3.Excel文件
(1)导入:
[<df>=]pd.read_excel(
<io>[,comment=None,converters=None,convert_float=True,date_parser=None,dtype=None,engine=None,
false_values=None,header=0,index_col=None,keep_default_na=True,mangle_dupe_cols=True),names=None,
na_filter=True,na_values=None,nrows=None,parse_dates=False,sheet_name=0,skipfooter=0,skiprows=None,
squeeze=False,thousands=None,true_values=None,usecols=None,verbose=False]
)
#参数说明:
io:指定要读取的文件;为str/bytes/ExcelFile/xlrd.Book/path object/file-like object
names:指定读取到的数据的列名;为array-like,默认为文件的首行
sheet_name:指定要读取的Sheet;为str(Sheet的名字)/int(Sheet的编号)/list(读取多个Sheet)/None(读取所有Sheet),默认为0
#实例:
>>> pd.read_excel("E:\\1.xlsx")
AAA BBB CCC DDD EEE
0 收到您们的 上的 NaN NaN NaN
1 NaN NaN 大苏打 NaN 都是
2 飒飒 NaN 大是大非 的受调查 呃呃
3 NaN 飒飒 NaN 萨3属性 NaN
4 NaN 都是 得到 NaN NaN
5 大苏打 大苏打 NaN NaN 啊
(2)导出:
<S_or_df>.to_excel(
[<excel_writer>,columns=None,encoding=None,engine=None,float_format=None,freeze_panes=None,header=True,
index=True,index_label=None,inf_rep="inf",merge_cells=True,na_rep="",sheet_name="Sheet1",startcol=0,
startrow=0,verbose=True]
)
#参数说明:其他参数同上
excel_writer:指定要导出到的文件;为str/ExcelWriter object
三.函数
1.合并与连接:
按行合并(合并)记录集:<ndf>=pd.concat(<objs>[,axis=0,join="outer",ignore_index=False,keys=None,levels=None,names=None,verify_integrity=False,sort=False,copy=True])
#会得到1个新的记录集,其中包含<objs>中所有元素中的所有记录
#参数说明:
objs:指定要合并的记录集;为sequence/mapping(其中的元素为Series/DataFrame)
ndf:返回合并后得到的记录;数据类型与<objs>中的元素相同
#实例:
>>> df1=pd.DataFrame([[1,2,3],[4,5,6]])
>>> df2=pd.DataFrame([[3,2,1],[6,5,4],[9,8,7]])
>>> pd.concat([df1,df2])
0 1 2
0 1 2 3
1 4 5 6
0 3 2 1
1 6 5 4
2 9 8 7
>>> pd.concat({"A":df1,"B":df2})
0 1 2
A 0 1 2 3
1 4 5 6
B 0 3 2 1
1 6 5 4
2 9 8 7
>>> s1=pd.Series([1,2])
>>> s2=pd.Series([3,4,5])
>>> pd.concat([s1,s2])
0 1
1 2
0 3
1 4
2 5
dtype: int64
>>> pd.concat({"A":s1,"B":s2})
A 0 1
1 2
B 0 3
1 4
2 5
dtype: int64
######################################################################################################################
按列合并(连接)记录集:pd.merge(<left>,<right>[,how="inner",on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=("_x","_y"),copy=True,indicator=False,validate=None])
#会得到1个新的记录集,其中的每条记录都由<left>/<right>中指定字段(即on,称为"连接键")的值相同的2条记录合并而来
#参数说明:
left,right:分别指定参与合并的左/右侧的记录集;为DataFrame
on:指定连接键;默认为<left>和<right>均包含的字段
#必须同时存在于<left>和<right>中
left_on,right_on:分别指定<left>/<right>中的连接键
#必须同时指定
left_index,right_index:是否使用<left>/<right>的行索引作为连接键;为bool
#使用left/right_index时,需指定right/left_index/on(为True)
#实例:
>>> df1=pd.DataFrame([[1,2,3],[4,5,6]])
>>> df2=pd.DataFrame([[3,2,1],[6,5,4],[9,8,7]])
>>> pd.merge(df1,df2)
Empty DataFrame
Columns: [0, 1, 2]
Index: []
>>> df1=pd.DataFrame([[1,2,3],[4,5,6]],columns=["a","b","c"])
>>> df2=pd.DataFrame([[1,2,3],[4,5,6]],columns=["a","d","e"])
>>> pd.merge(df1,df2)
a b c d e
0 1 2 3 2 3
1 4 5 6 5 6
>>> df1=pd.DataFrame([[1,2,3],[1,5,6]],columns=["a","b","c"])
>>> pd.merge(df1,df2)
a b c d e
0 1 2 3 2 3
1 1 5 6 2 3
>>> df1=pd.DataFrame([[1,2,1],[1,5,6]],columns=["a","b","c"])
>>> df2=pd.DataFrame([[1,2,3],[1,5,6]],columns=["a","b","c"])
>>> pd.merge(df1,df2,left_on="c",right_on="a")
a_x b_x c_x a_y b_y c_y
0 1 2 1 1 2 3
1 1 2 1 1 5 6
>>> pd.merge(df1,df2,left_index=True,right_on="a")
a a_x b_x c_x a_y b_y c_y
0 1 1 5 6 1 2 3
1 1 1 5 6 1 5 6
>>> pd.merge(df1,df2,left_index=True,right_index=True)
a_x b_x c_x a_y b_y c_y
0 1 2 1 1 2 3
1 1 5 6 1 5 6
2.统计
(1)标准化:
对指定列进行数据标准化:(<df>.<column>-<df>.<column>.min())/(<df>.<column>.max()-<df>.<column>.min())
#参数说明:
df:指定DataFrame对象
column:指定列
>>> df=pd.DataFrame([[1,2],[3,4],[5,6],[1,2],[3,1]],columns=["a","b"])
>>> scale=(df.a-df.a.min())/(df.a.max()-df.a.min())
>>> scale
0 0.0
1 0.5
2 1.0
3 0.0
4 0.5
Name: a, dtype: float64
(2)分组:
对数据集进行分组:[<out>=]pd.cut(<x>,<bins>[,right=True,labels=None,retbins=False,precision=3,include_lowest=False,duplicates="raise",ordered=True])
#参数说明:
x:指定要分组的数据集;为array-like(必须为1维)
bins:指定如何分组;为int/scalar sequence/pandas.core.indexes.interval.IntervalIndex
#为int表示将<x>中的所有元素等分为<x>份
#为scalar sequence表示指定组与组之间的边界
# 要求满足<bins>[0] < <bins>[1] < ... < <bins>[n]
# 所得到的所有组为(<bins>[0],<bins>[1]],(<bins>[1],<bins>[2]]...(<bins>[n-1],<bins>[n]]
# 不属于任何组的元素在<out>中的对应元素为NaN
#为pandas.core.indexes.interval.IntervalIndex表示直接指定使用的组
# 要求组与组直接不能重叠
out:返回分组结果;为Series,其中元素为<x>中对应元素所属的组
#实例:
>>> df=pd.DataFrame([[1,2],[3,4],[5,6],[1,2],[3,1]],columns=["a","b"])
>>> pd.cut(df.a,2)
0 (0.996, 3.0]
1 (0.996, 3.0]
2 (3.0, 5.0]
3 (0.996, 3.0]
4 (0.996, 3.0]
Name: a, dtype: category
Categories (2, interval[float64]): [(0.996, 3.0] < (3.0, 5.0]]
>>> pd.cut(df.a,[-10,2,3,4])
0 (-10.0, 2.0]
1 (2.0, 3.0]
2 NaN
3 (-10.0, 2.0]
4 (2.0, 3.0]
Name: a, dtype: category
Categories (3, interval[int64]): [(-10, 2] < (2, 3] < (3, 4]]
(3)交叉分析:
创建透视表:[<pivotable>=]pd.pivot_table(data=None[,index=None,columns=None,values=None,aggfunc="mean",fill_value=None,margins=False,dropna=True,margins_name="All",observed=False])
#长数据→宽数据;支持数据聚合;相当于<data>.pivot_table()
#表中元素为{[(相应列的值)等于(透视表中该位置处的行和列索引)]的记录}的指定统计量
#参数说明:
data:指定数据来源;为DataFrame
#也可为位置参数
index,columns:分别指定结果中的行/列索引;为list-like
#即如何将数据分组,每组再根据values/aggfunc求出该组在<pivotable>中的对应元素;需要至少指定1个
values:指定要分析的哪个列;为str(data中的列名)/str list,默认自动确定
aggfunc:指定要获得的统计量;为str/function/function list/dict,默认值表示numpy.mean
pivotable:返回分析结果;为DataFrame
#实例:
>>> df=pd.read_excel("E://1.xlsx")
>>> df
姓名 年龄 爱好 城市
0 王五 33 A BJ
1 张三 23 D SH
2 李四 34 S GZ
3 赵二 14 V SZ
4 周十 52 D NJ
5 韩三 21 V HZ
>>> pd.pivot_table(df,index=df["爱好"])
年龄
爱好
A 33.0
D 37.5
S 34.0
V 17.5
>>> pd.pivot_table(df,columns=df["爱好"])
爱好 A D S V
年龄 33.0 37.5 34.0 17.5
>>> pd.pivot_table(df,index=df["爱好"],columns=df["城市"],values="年龄")
城市 BJ GZ HZ NJ SH SZ
爱好
A 33.0 NaN NaN NaN NaN NaN
D NaN NaN NaN 52.0 23.0 NaN
S NaN 34.0 NaN NaN NaN NaN
V NaN NaN 21.0 NaN NaN 14.0
######################################################################################################################
创建透视表:pd.pivot(<data>,columns=None[,index=None,values=None])
#长数据→宽数据;不支持数据聚合;参见 Python.第三方模块.数据分析.Pandas模块.DataFrame.三.3.(4) 部分
######################################################################################################################
还原透视表(逆透视):pd.melt(<frame>[,id_vars=None,value_vars=None,var_name=None,value_name="value",col_level=None,ignore_index=True])
#宽数据→长数据;参见 Python.第三方模块.数据分析.Pandas模块.DataFrame.三.3.(4) 部分
######################################################################################################################
创建交叉表:pd.crosstab(<index>,<columns>[,values=None,rownames=None,colnames=None,aggfunc=None,margins=False,margins_name="All",dropna=True,normalize=False])
#参数说明:
index,columns:指定交叉表的行/列上的分组;为array-like/Series/array list/Series list
margins:指定是否添加汇总行/列;为bool
margins_name:指定汇总行/列的标签;为str
#实例:
>>> df=pd.DataFrame([["A",1,11],["B",2,22],["C",3,33],["D",4,44],["E",5,55],["F",6,66],["G",7,77],["H",8,88]],columns=["a","b","c"])
>>> pd.crosstab(df["a"],df["b"])
b 1 2 3 4 5 6 7 8
a
A 1 0 0 0 0 0 0 0
B 0 1 0 0 0 0 0 0
C 0 0 1 0 0 0 0 0
D 0 0 0 1 0 0 0 0
E 0 0 0 0 1 0 0 0
F 0 0 0 0 0 1 0 0
G 0 0 0 0 0 0 1 0
H 0 0 0 0 0 0 0 1
>>> pd.crosstab(df["a"],df["b"],margins=True)
b 1 2 3 4 5 6 7 8 All
a
A 1 0 0 0 0 0 0 0 1
B 0 1 0 0 0 0 0 0 1
C 0 0 1 0 0 0 0 0 1
D 0 0 0 1 0 0 0 0 1
E 0 0 0 0 1 0 0 0 1
F 0 0 0 0 0 1 0 0 1
G 0 0 0 0 0 0 1 0 1
H 0 0 0 0 0 0 0 1 1
All 1 1 1 1 1 1 1 1 8
(4)计数:
求各个值的数量:pd.value_counts(<values>[,sort=True,ascending=False,normalize=False,bins=None,dropna=True])
#参数说明:
values:指定数组;为array
sort:是否按值对结果进行排序;为bool
ascending:是否按升序排序;为bool
dropna:是否求NaN的数量;为bool
#实例:
>>> pd.value_counts([None,11,22,44,None,22,22,11])
22 3
11 2
44 1
dtype: int64
(5)哑变量:
将数据转换为哑变量:pd.get_dummies(<data>[,prefix=None,prefix_sep="_",dummy_na=False,columns=None,sparse=False,drop_first=False,dtype=None])
#得到的结果称为"哑变量矩阵"(Dummy Matrix)或"指标矩阵"(Indicator Matrix)
#参数说明:
data:指定数据;为array-like/Series/DataFrame
prefix:指定列名的前缀;为None/str/str list/dict
prefix_sep:指定用于连接前缀的连接符;为str
dummy_na:是否考虑NaN;为bool
#实例:
>>> pd.get_dummies(["a","c","a","b","c","c"])
a b c
0 1 0 0
1 0 0 1
2 1 0 0
3 0 1 0
4 0 0 1
5 0 0 1
3.数据预处理
(1)离散化:
对数据进行等距划分:pd.cut(<x>,<bins>[,right=True,labels=None,retbins=False,precision=3,include_lowest=False,duplicates="raise",ordered=True])
#数据会被分入不同的区域中,每个区域中的数据使用相同的标签表示;返回pandas.core.arrays.categorical.Categorical
#参数说明:
x:指定数据;为array-like/Series
bins:指定区间(指定区间数/区间边界);为int/scalar sequence/IntervalIndex
right:为True,则使用左开右闭区间;为False,则使用左闭右开区间
labels:指定各个区间的标签;为array/False(0,1...)/None(使用区间本身)
retbins:是否返回各个区间的边界构成的array
#在bins为int时很有用
precision:存储区间标签的精度;为int
include_lowest:指定首区间是否包含左边界;为bool
#bins为int时总包含
duplicates:指定区间边界不唯一时如何处理;为'raise'/'drop'
ordered:是否对结果排序;为bool
#实例:
>>> pd.cut([1,2,3,4,100,200],2)
[(0.801, 100.5], (0.801, 100.5], (0.801, 100.5], (0.801, 100.5], (0.801, 100.5], (100.5, 200.0]]
Categories (2, interval[float64]): [(0.801, 100.5] < (100.5, 200.0]]
>>> pd.cut([1,2,3,4,5,6,7],[0,2,6,7],3,retbins=True)
([(0, 2], (0, 2], (2, 6], (2, 6], (2, 6], (2, 6], (6, 7]]
Categories (3, interval[int64]): [(0, 2] < (2, 6] < (6, 7]], array([0, 2, 6, 7]))
>>> pd.cut([1,2,3,4,5,6,7],3,precision=1)
[(1.0, 3.0], (1.0, 3.0], (1.0, 3.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], (5.0, 7.0]]
Categories (3, interval[float64]): [(1.0, 3.0] < (3.0, 5.0] < (5.0, 7.0]]
>>> pd.cut([1,2,3,4,5,6,7],[0,2,6,7])
[(0, 2], (0, 2], (2, 6], (2, 6], (2, 6], (2, 6], (6, 7]]
Categories (3, interval[int64]): [(0, 2] < (2, 6] < (6, 7]]
>>> pd.cut([1,2,3,4,5,6,7],[0,2,6,7],retbins=True)
([(0, 2], (0, 2], (2, 6], (2, 6], (2, 6], (2, 6], (6, 7]]
Categories (3, interval[int64]): [(0, 2] < (2, 6] < (6, 7]], array([0, 2, 6, 7]))
>>> pd.cut([1,2,3,4,5,6,7],[0,2,6,7],labels=["a","b","c"])
['a', 'a', 'b', 'b', 'b', 'b', 'c']
Categories (3, object): ['a' < 'b' < 'c']
>>> pd.cut([1,2,3,4,5,6,7],[1,6,7],include_lowest=True)
[(0.999, 6.0], (0.999, 6.0], (0.999, 6.0], (0.999, 6.0], (0.999, 6.0], (0.999, 6.0], (6.0, 7.0]]
Categories (2, interval[float64]): [(0.999, 6.0] < (6.0, 7.0]]
>>> pd.cut([1,2,3,4,5,6,7],[1,6,7])
[NaN, (1.0, 6.0], (1.0, 6.0], (1.0, 6.0], (1.0, 6.0], (1.0, 6.0], (6.0, 7.0]]
Categories (2, interval[int64]): [(1, 6] < (6, 7]]
>>> pd.cut(pd.Series([1,2,3,4,5,6,7]),[1,2,4,10])
0 NaN
1 (1.0, 2.0]
2 (2.0, 4.0]
3 (2.0, 4.0]
4 (4.0, 10.0]
5 (4.0, 10.0]
6 (4.0, 10.0]
dtype: category
Categories (3, interval[int64]): [(1, 2] < (2, 4] < (4, 10]]
######################################################################################################################
对数据进行等量划分:pd.qcut(<x>,<q>[,labels=None,retbins=False,precision=3,duplicates="raise"])
#每个区间中的数据量大致相同;返回pandas.core.arrays.categorical.Categorical
#参数说明:
q:指定区间(指定区间数/分位数);为int/num list-like
#实例:
>>> pd.qcut([1,2,3,4,100,200],2)
[(0.999, 3.5], (0.999, 3.5], (0.999, 3.5], (3.5, 200.0], (3.5, 200.0], (3.5, 200.0]]
Categories (2, interval[float64]): [(0.999, 3.5] < (3.5, 200.0]]
>>> pd.qcut([1,2,3,4,100,200],[0,0.16,0.32,1])
[(0.999, 1.8], (1.8, 2.6], (2.6, 200.0], (2.6, 200.0], (2.6, 200.0], (2.6, 200.0]]
Categories (3, interval[float64]): [(0.999, 1.8] < (1.8, 2.6] < (2.6, 200.0]]
4.创建日期时间对象:
创建日期时间索引序列:pd.date_range([start=None,end=None,periods=None,freq="D",tz=None,normalize=False,name=None,closed=None,**kwargs])
#返回pandas.core.indexes.datetimes.DatetimeIndex,其中的元素为pandas._libs.tslibs.timestamps.Timestamp
#每2个相邻数据对象间相隔的时间都是相等的
#参数说明:
start,end:指定序列的起始/结束时间;为str/datetime-like
periods:指定序列长度(包含几个日期时间对象);为int
freq:指定数据的频率;为str(日期偏移量的别名)/DateOffset
#应指定以上4个对象中的任意3个;"D"表示每天1个对象(2个相邻对象间相隔1天)
tz:指定时区;为str/tzinfo,默认为无时区(timezone-naive)
normalize:指定在创建前将起始/结束时间调整的指定日的0点;为bool
name:指定返回值的名字;为str
#实例:
>>> pd.date_range(start="2001/05/09",end="2021/01/29")
DatetimeIndex(['2001-05-09', '2001-05-10', '2001-05-11', '2001-05-12',
'2001-05-13', '2001-05-14', '2001-05-15', '2001-05-16',
'2001-05-17', '2001-05-18',
...
'2021-01-20', '2021-01-21', '2021-01-22', '2021-01-23',
'2021-01-24', '2021-01-25', '2021-01-26', '2021-01-27',
'2021-01-28', '2021-01-29'],
dtype='datetime64[ns]', length=7206, freq='D')
>>> pd.date_range(start="2001/05/09",end="2021/01/29",periods=10)
DatetimeIndex(['2001-05-09 00:00:00', '2003-07-18 13:20:00',
'2005-09-26 02:40:00', '2007-12-05 16:00:00',
'2010-02-13 05:20:00', '2012-04-23 18:40:00',
'2014-07-03 08:00:00', '2016-09-10 21:20:00',
'2018-11-20 10:40:00', '2021-01-29 00:00:00'],
dtype='datetime64[ns]', freq=None)
>>> pd.date_range('2000-01-01','2000-01-01 11:00',freq='4h')
DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 04:00:00',
'2000-01-01 08:00:00'],
dtype='datetime64[ns]', freq='4H')
>>> pd.date_range('2000-01-01','2000-01-01 11:00',freq='1h30t')
DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 01:30:00',
'2000-01-01 03:00:00', '2000-01-01 04:30:00',
'2000-01-01 06:00:00', '2000-01-01 07:30:00',
'2000-01-01 09:00:00', '2000-01-01 10:30:00'],
dtype='datetime64[ns]', freq='90T')
>>> print(pd.date_range('2000-01-01','2000-01-01 11:00',freq='1h30t').tz)#时区
None
######################################################################################################################
转换为时间戳对象:pd.to_datetime(<arg>[,errors="raise",dayfirst=False,yearfirst=False,utc=None,format=None,exact=True,unit=None,infer_datetime_format=False,origin="unix",cache=True])
#返回pandas._libs.tslibs.timestamps.Timestamp
#参数说明:
arg:指定日期时间;为int/float/str/datetime/list-like/Series/DataFrame/dict-like
format:指定日期时间的格式;为None(尽可能进行转换)/str(需要传入指定格式的日期时间)
#实例:
>>> pd.to_datetime("2202/3/12")
Timestamp('2202-03-12 00:00:00')
>>> pd.to_datetime("3/12/2001",format="%d/%m/%Y")
Timestamp('2001-12-03 00:00:00')
>>> pd.to_datetime("2202/3/12/32",format="%Y/%d/%m/%f")
Timestamp('2202-12-03 00:00:00.320000')
>>> pd.to_datetime("22020211063955")
Timestamp('2202-02-11 06:39:55')
######################################################################################################################
创建日期索引序列:pd.period_range([start=None,end=None,periods=None,freq=None,name=None])
#返回pandas.core.indexes.period.PeriodIndex
#参数说明:
start,end:指定序列的起始/结束时间;为str/Period-like
periods:指定序列长度(包含几个日期对象);为int
#应指定以上3个参数中的任意2个
freq:指定数据的频率;为str(日期偏移量的别名)/DateOffset
#若start/end为Period object,则来自start/end;否则,为"D"
#实例:
>>> pd.period_range(start="2001/01/01",end="2001/12/31",freq="M")
PeriodIndex(['2001-01', '2001-02', '2001-03', '2001-04', '2001-05', '2001-06',
'2001-07', '2001-08', '2001-09', '2001-10', '2001-11', '2001-12'],
dtype='period[M]', freq='M')