Pandas中时间序列的处理大全

一、时间序列数据的生成

pd.date_ranges生成时间序列

  • time格式:年月日分隔符号可以是"-","/",空格这三种格式(年月日、日月年、月日年都可以);时分秒只能用":"分隔,顺序只能是时分秒。
  • start:起始时间(time)
  • end:终止时间(time)
  • periods:期数(int),使用时只能出现start或者end,两者不能同时出现
  • freq:频率(numY,num年;numM,num月;numD,num日),详细参数见下表
频率别名 描述
B 工作日频率
C 自定义工作日频率
D 日历日频率
W 每周频率
M 每月最后一个日历日
SM 每半个月最后一个日历日(15日和月末)
BM 每月最后一个工作日
CBM 自定义每月最后一个工作日
MS 每月第一个日历日
SMS 每半月第一个日历日(第1和第15)
BMS 每月第一个工作日
CBMS 自定义每月第一个工作日
Q 每季度最后一个月的最后一个日历日
BQ 每季度最后一个月的最后一个工作日
QS 每季度最后一个月的第一个日历日
BQS 每季度最后一个月的第一个工作日
A, Y 每年的最后一个日历日
BA, BY 每年的最后一个工作日
AS, YS 每年的第一个日历日
BAS, BYS 每年的第一个工作日
BH 工作日按“时”计算频率
H 每小时频率
T, min 每分钟频率
S 每秒频率
L, ms 毫秒频率
U, us 微秒频率
N 纳秒频率
import pandas as pd
import numpy as np
df = pd.DataFrame( data=np.random.randint(1,20,10),
                  index=pd.date_range(start="20/01/2021",periods=10,freq="M"),)
print(df)

0
2021-01-31   1
2021-02-28   6
2021-03-31  12
2021-04-30   5
2021-05-31   7
2021-06-30   4
2021-07-31   9
2021-08-31   7
2021-09-30  18
2021-10-31  10

0
count  10.00000
mean    7.90000
std     4.72464
min     1.00000
25%     5.25000
50%     7.00000
75%     9.75000
max    18.00000

二、Pandas设置索引

创建时添加索引

pd.DataFrame(...,index=[],...)

df.set_index使用现有列设置索引

  • keys:列名,多个列用[name1,name2]
  • drop:设置升序(True)、降序(False)
  • inplace:替换原变量(True),不替换(False)
df.set_index(["X"],inplace=True)
df.set_index(["X","Y"],inplace=True)

df.reset_index可以还原索引

df.reset_index("X")

三、 时间序列数据的截取

df.truncate过滤数据

  • before:过滤之前的数据(time)
  • after:过滤之后的数据(time)
  • axis:列(columns),行(index)
df.truncate(before="2021-5",after="2021-9")

0
2021-05-31  7
2021-06-30  4
2021-07-31  9
2021-08-31  7

df.loc索引过滤

df.loc["2021-5":]

0
2021-05-31   7
2021-06-30   4
2021-07-31   9
2021-08-31   7
2021-09-30  18
2021-10-31  10

四、Pandas重复值处理

4.1 查询是否有重复值

duplicated()方法判断

# 判断dataframe数据整行是否重复
df.duplicated()
# dataframe数据某列是否重复
df.columns_name.duplicated()
# 判断dataframe数据多列数据是否重复(多列组合查)
df.duplicated(subset = ['n1','n2'])

groupby().count()

df.groupby('columns').count()>1

4.2 去除重复值

drop_duplicats参数说明:

  • 参数subset:用来指定特定的列,默认所有列
  • 参数keep:first和last表示是选择最前一项还是最后一项保留,默认first
  • 参数inplace:是直接在原来数据上修改还是保留一个副本,默认为False
df.drop_duplicats(subset=['name1','name2'],keep='last',inplace=True)

按照index索引去重

df.index.duplicated(keep='last')

五、Pandas缺失值处理

5.1 缺失值查询

df.info查询各列的信息

df.info()

# res
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10 entries, 19 to 14
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   Y       10 non-null     int32
 1   Z       10 non-null     int32
dtypes: int32(2)
memory usage: 160.0 bytes

df.isnull判断是否是空值

df.isnull().any() # 筛选出缺失值的列
df.isna().any() # 筛选出缺失值的列

df.empty判断是否有空值

df.empty

5.2 缺失值填充

ffill 空值取前面的值

df.ffill()

bfill 空值取后面的值

df.bfill()

fillna 指定值填充

df.fillna(1)
df.fillna({'A': 0, 'B': 1, 'C': 2, 'D': 3}) # 指定列填充

interpolate 插值

  • df.interpolate(method=‘linear', axis=0, limit=None, inplace=False, limit_direction=‘forward', limit_area=None, downcast=None, **kwargs)
  • method参数解释
    • linear:忽略索引,线性等距插值
    • time:在以天或者更高频率的数据上插入给定的时间间隔长度数据
    • index, values:使用索引的实际数值
    • pad:使用现有值填写NaN
    • nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial:传递给scipy.interpolate.interp1d。这些方法使用索引的数值。polynomial和spline都要求您还指定一个顺序(int),例如 ,df.interpolate(method=‘polynomial', order=5)
    • krogh,piecewise_polynomial,spline,pchip,akima:包括类似名称的SciPy插值方法。
    • from_derivatives:指 scipy.interpolate.BPoly.from_derivatives,它替换了scipy 0.18中的'piecewise_polynomial'插值方法
  • axis : {0或'index',1或'columns',None},默认为None;沿轴进行interpolate。
  • limit: int;要填充的连续NaN的最大数量。必须大于0
  • inplace : bool,默认为False;如果可以,更新现有数据
  • limit_direction : {‘forward',‘backward',‘both'},默认为'forward';如果指定了限制,则将沿该方向填充连续的NaN
  • limit_area : {None, ‘inside', ‘outside'}, 默认为None;如果指定了限制,则连续的NaN将填充此限制。
  • None:无填充限制
  • inside:仅填充有效值包围的NaN
  • outside: 仅在有效值之外填充NaN
dff.interpolate(method='polynomial',order=2)

删除缺失值

df.dropna(how='any')

六、pandas统计计算方法

方法 说明
count 非NaN值的数理
describe 列计算统计汇总
min、max 最小值和最大值
argmin、argmax 最小值和最大值索引(int)
idxmin、idxmax 最小值和最大值索引
quantile 分位数([0,1],0.25下四分为)
sum 总和
mean 均值
median 0.5分位数,中位数
mad 根据均值计算绝对离差
var 方差
std 标准差
df.describe()

七、Pandas数据重采样

重采样就是基于时间数据由一个频率转换到另一个频率的方法,分为降采样和升采样。

降采样:高频率===>低频率,如频率日变为月,需要指定统计函数如sum

df.resample("M").mean()

升采样:低频率===>高频率,如频率月变为日,需要进行缺失值填充

df.resample("D").asfreq().fillna(1)

总结

到此这篇关于Pandas中时间序列处理的文章就介绍到这了,更多相关Pandas时间序列处理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python Pandas库基础分析之时间序列的处理详解

    前言 在使用Python进行数据分析时,经常会遇到时间日期格式处理和转换,特别是分析和挖掘与时间相关的数据,比如量化交易就是从历史数据中寻找股价的变化规律.Python中自带的处理时间的模块有datetime,NumPy库也提供了相应的方法,Pandas作为Python环境下的数据分析库,更是提供了强大的日期数据处理的功能,是处理时间序列的利器. 1.生成日期序列 主要提供pd.data_range()和pd.period_range()两个方法,给定参数有起始时间.结束时间.生成时期的数目及时

  • Pandas时间序列:时期(period)及其算术运算详解

    import pandas as pd import numpy as np 一.时间类型及其在python中对应的类型 时间戳–timestamp 时间间隔–timedelta 时期–period 二.时期 时期表示的是时间区间,比如数日.数月.数季.数年等 1.定义一个Period p = pd.Period(2007,freq='A-DEC') #表示以12月作为结束的一整年,这里表示从2007-01-01到2017-12-31的全年 p Period('2007', 'A-DEC') 2

  • Pandas时间序列重采样(resample)方法中closed、label的作用详解

    Pandas提供了便捷的方式对时间序列进行重采样,根据时间粒度的变大或者变小分为降采样和升采样: 降采样:时间粒度变大.例如,原来是按天统计的数据,现在变成按周统计.降采样会涉及到数据的聚合,比如天数据变成周数据,那么就得对一周的7天数据聚合,聚合的方式可以是求和,求均值等等. 升采样:时间粒度变小.例如,原来是按周统计的数据,现在变成按天统计.升采样会涉及到数据的填充,根据填充的方法不同填充的数据也就不同. 下面涉及的例子,都需要导入numpy和pandas(如下),并且对于降采样数据的聚合做

  • python pandas 对时间序列文件处理的实例

    如下所示: import pandas as pd from numpy import * import matplotlib.pylab as plt import copy def read(filename): dat=pd.read_csv(filename,iterator=True) loop = True chunkSize = 1000000 R=[] while loop: try: data = dat.get_chunk(chunkSize) data=data.loc[:

  • Pandas时间序列基础详解(转换,索引,切片)

    时间序列的类型: 时间戳:具体的时刻 固定的时间区间:例如2007年的1月或整个2010年 时间间隔:由开始时间和结束时间表示,时间区间可以被认为是间隔的特殊情况 实验时间和消耗时间:每个时间是相对于特定开始时间的时间的量度,(例如自从被放置在烤箱中每秒烘烤的饼干的直径) 日期和时间数据的类型及工具 datetime模块中的类型: date 使用公历日历存储日历日期(年,月,日) time 将时间存储为小时,分钟,秒,微秒 datetime 存储日期和时间 timedelta 表示两个datet

  • python时间日期函数与利用pandas进行时间序列处理详解

    python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差. 下面我们先简单的了解下python日期和时间数据类型及工具 给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象 from datetime import datetime from datetime impo

  • pandas基于时间序列的固定时间间隔求均值的方法

    如果index是时间序列就不用转datetime:但是如果时间序列是表中的某一列,可以把这一列设为index 例如: 代码: DF=df2.set_index(df1['time_slot1']) DF.index=pd.to_datetime(DF.index,unit='ns') ticket=DF.ix[:,['all_time']] #以20分钟为一个时间间隔,求出所有间隔的平均时间 A_2analysisResult=ticket.all_time.resample('20min').

  • Pandas时间序列:重采样及频率转换方式

    如下所示: import pandas as pd import numpy as np 一.介绍 重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过程: 将高频率(间隔短)数据聚合到低频率(间隔长)称为降采样(downsampling): 将低频率数据转换到高频率则称为升采样(unsampling): 有些采样即不是降采样也不是升采样,例如将W-WED(每周三)转换为W-FRI: 二.resample方法–转换频率的主力函数 rng = pd.date_range

  • python+pandas+时间、日期以及时间序列处理方法

    先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差. 给datetime对象加上或减去一个或多个timedelta,会产生一个新的对象 from datetime import datetime from datetime import timedel

  • Pandas中时间序列的处理大全

    一.时间序列数据的生成 pd.date_ranges生成时间序列 time格式:年月日分隔符号可以是"-","/",空格这三种格式(年月日.日月年.月日年都可以):时分秒只能用":"分隔,顺序只能是时分秒. start:起始时间(time) end:终止时间(time) periods:期数(int),使用时只能出现start或者end,两者不能同时出现 freq:频率(numY,num年:numM,num月:numD,num日),详细参数见下表

  • Pandas中resample方法详解

    Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法. 方法的格式是: DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0) 参数详解是: 参数 说明 freq 表示重采样频率,

  • 浅谈pandas中shift和diff函数关系

    通过?pandas.DataFrame.shift命令查看帮助文档 Signature: pandas.DataFrame.shift(self, periods=1, freq=None, axis=0) Docstring: Shift index by desired number of periods with an optional time freq 该函数主要的功能就是使数据框中的数据移动,若freq=None时,根据axis的设置,行索引数据保持不变,列索引数据可以在行上上下移动

  • python3中datetime库,time库以及pandas中的时间函数区别与详解

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的.通读文档可知,time 模块是围绕着 Unix Timestamp 进行的. 该模块主要包括一个类 struct_time,另外其他几个函数及相关常量. 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以

  • Pandas中DataFrame基本函数整理(小结)

    构造函数 DataFrame([data, index, columns, dtype, copy]) #构造数据框 属性和数据 DataFrame.axes #index: 行标签:columns: 列标签 DataFrame.as_matrix([columns]) #转换为矩阵 DataFrame.dtypes #返回数据的类型 DataFrame.ftypes #返回每一列的 数据类型float64:dense DataFrame.get_dtype_counts() #返回数据框数据类

  • 详解pandas中缺失数据处理的函数

    目录 一.缺失值类型 1.np.nan 2.None 3.NA标量 二.缺失值判断 1.对整个dataframe判断缺失 2.对某个列判断缺失 三.缺失值统计 1.列缺失 2.行缺失 3.缺失率 四.缺失值筛选 五.缺失值填充 六.缺失值删除 1.全部直接删除 2.行缺失删除 3.列缺失删除 4.按缺失率删除 七.缺失值参与计算 1.加法 2.累加 3.计数 4.聚合分组 五.源码 今天分享一篇pandas缺失值处理的操作指南! 一.缺失值类型 在pandas中,缺失数据显示为NaN.缺失值有3

  • Python Pandas中缺失值NaN的判断,删除及替换

    目录 前言 1. 检查缺失值NaN 2. Pandas中NaN的类型 3. NaN的删除 dropna() 3.1 删除所有值均缺失的行/列 3.2 删除至少包含一个缺失值的行/列 3.3 根据不缺少值的元素数量删除行/列 3.4 删除特定行/列中缺少值的列/行 4. 缺失值NaN的替换(填充) fillna() 4.1 用通用值统一替换 4.2 为每列替换不同的值 4.3 用每列的平均值,中位数,众数等替换 4.4 替换为上一个或下一个值 总结 前言 当使用pandas读取csv文件时,如果元

  • Pandas中常用的七个时间戳处理函数使用总结

    目录 1.查找特定日期的某一天的名称 2.执行算术计算 3.使用时区信息来操作转换日期时间 4.使用日期时间戳 5.创建日期系列 6.操作日期序列 7.使用时间戳数据对数据进行切片 在零售.经济和金融等行业,数据总是由于货币和销售而不断变化,生成的所有数据都高度依赖于时间.如果这些数据没有时间戳或标记,实际上很难管理所有收集的数据.Python 程序允许我们使用 NumPy timedelta64 和 datetime64 来操作和检索时间序列数据.sklern库中也提供时间序列功能,但 Pan

  • Python pandas中apply函数简介以及用法详解

    目录 1.基本信息 2.语法结构 3.使用案例 3.1 DataFrame使用apply 3.2 Series使用apply 3.3 其他案例 4.总结 参考链接: 1.基本信息 ​ Pandas 的 apply() 方法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理.Pandas 的很多对象都可以使用 apply() 来调用函数,如 Dataframe.Series.分组对象.各种时间序列等. 2.语法结构 ​ apply() 使用时,通常放入一个 lambd

随机推荐