温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Pandas中时间序列的处理方法

发布时间:2021-06-07 14:39:25 来源:亿速云 阅读:243 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“Pandas中时间序列的处理方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“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均值
median0.5分位数,中位数
mad根据均值计算绝对离差
var方差
std标准差
df.describe()

七、Pandas数据重采样

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

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

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

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

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

以上是“Pandas中时间序列的处理方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI